---
id: "66e80f94-780b-4856-806d-ba4b96673630"
number: 117
title: "Garantir la synchronie métier de idea_ask_agent malgré les background tasks"
status: "closed"
priority: "high"
sprint: null
links: []
agentRefs: [{"agentId":"a6ced819-b893-4213-b003-9e9dc79b9641","role":"assigned"}]
attachments: []
createdBy: {"kind":"user"}
updatedBy: {"kind":"agent","agent_id":"cd0b4cf1-1bef-4fae-ade5-f0a6b49bbaf5"}
createdAt: 1785500280516
updatedAt: 1785503128343
version: 7
---
Constat : quand un agent `A` délègue une demande à un agent `B` via `idea_ask_agent`, `B` peut lancer une background task puis terminer son tour avant que cette tâche ne finisse. Dans ce cas, `A` peut recevoir une pseudo-réponse terminale trop tôt, alors que le travail réel n'est pas terminé.

Décision produit validée : `idea_ask_agent` doit rester synchrone d'un point de vue métier.

Cela implique :
- `A` ne doit jamais recevoir comme réponse métier finale un simple "task lancée" si le résultat utile dépend encore d'une background task.
- si `B` a besoin d'une background task pour produire sa réponse, la délégation `A -> B` reste ouverte.
- la background task est une étape interne du traitement de `B`, pas une réponse à `A`.
- à la fin de la task, IdeA réveille `B`, puis `B` rend la vraie réponse finale.
- `A` reste en attente du rendez-vous logique, même si techniquement le tour initial de `B` s'est terminé.

Objectif :
Faire en sorte qu'une background task lancée pendant un `idea_ask_agent` soit corrélée au rendez-vous inter-agent en cours, et que ce rendez-vous reste ouvert jusqu'à la réponse finale métier de `B`.

Invariants à garantir :
- `idea_ask_agent` ne se termine jamais par "task lancée" si le résultat utile dépend encore d'une background task.
- toute background task lancée pendant une délégation porte la corrélation du rendez-vous source.
- la complétion de task réveille `B`, pas `A` directement.
- `B` transforme ensuite le résultat en vraie réponse finale à `A`.
- la réponse capturée pour `A` n'est émise qu'après clôture logique du travail.
- reboot, cancel, timeout et échec de task ne doivent pas casser cette corrélation.

Découpage attendu :
1. Étendre le modèle de corrélation pour rattacher une background task à un rendez-vous délégué.
2. Introduire un état explicite de rendez-vous du type `WaitingOnBackgroundTask` ou équivalent.
3. Empêcher la clôture terminale d'un `idea_ask_agent` tant qu'une task corrélée est encore ouverte.
4. À la complétion, réveiller `B`, injecter le résultat dans son inbox, puis laisser `B` répondre à `A`.
5. Ajouter les tests de reprise après reboot, timeout, cancel et double complétion.

Critères de validation :
- `A` délègue à `B`, `B` lance une task longue, `A` n'obtient pas de faux terminal.
- à la fin de la task, `B` est réveillé et répond finalement à `A`.
- après redémarrage, la réponse finale revient encore à `A`.
- échec ou annulation de task produisent une réponse terminale cohérente côté `A`.
- aucune complétion ne reste orpheline hors du rendez-vous initial.