Rectification de la branche C introduite dans a21f1ea9f.
## Ce qui était faux
a21f1ea9f faisait :
strict + no_screen_change → retry × 3 → status=error → queue vidée
C'est le réflexe d'un RPA classique qui se casse la figure quand ça
rate. Ce n'est PAS la philosophie Léa.
Dom m'a rappelé que j'avais oublié ma propre vision documentée dans
project_lea_apprentissage_plan.md et feedback_not_a_click_box.md :
*"Quand elle dit qu'elle n'a pas trouvé X, elle demande montre-moi.
C'est à ce moment qu'il faudrait passer en mode apprentissage."*
## Ce qui est correct maintenant
strict + no_screen_change
→ status = "paused_need_help"
→ failed_action stocké (target, screenshot, method, score, reason)
→ pause_message demandant l'intervention humaine
→ queue intacte (l'action reste en tête, prête à être relancée)
→ log_replay_failure pour l'apprentissage futur
→ l'agent reçoit replay_paused=True dans /replay/next et s'arrête
→ l'humain corrige physiquement sur la machine cible
→ le replay reprend via /replay/{replay_id}/resume
Redirection vers le mécanisme paused_need_help qui existe déjà pour le
cas target_not_found. Zéro nouveau code de pause, juste une 2ème entrée
dans ce mécanisme.
Le comportement legacy (success_strict=False) reste inchangé : on
log un warning et on continue, comportement tolérant pour les actions
non-critiques.
## Lesson apprises
1. Toujours relire les fichiers mémoire pertinents AVANT d'implémenter
une branche de gestion d'erreur (nouvelle règle dans
feedback_reread_before_code.md)
2. Un échec Léa n'est jamais un "stop avec error" — c'est un moment
pédagogique (nouvelle règle dans feedback_failure_is_learning.md)
3. Ne pas s'auto-presser quand Dom n'a jamais demandé d'aller vite
## Tests
- 56 tests E2E + Phase0 passent, 0 régression
- Comportement vérifié par inspection du code : pause_message formé
correctement, queue préservée, log_replay_failure appelé
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>