Workflow SDK 5 : les longs jobs IA ont besoin d’un contrat d’annulation
Un job IA long devient risqué quand l’équipe ne sait plus ce qui continue après l’annulation. L’utilisateur ferme la demande, le modèle tourne encore; le timeout gagne, mais un upload finit; une limite de quota se déclenche, puis un retry coûte davantage.
Le 16 juin 2026, Vercel a annoncé que Workflow SDK 5 beta supporte AbortController et AbortSignal à travers les frontières workflow/step. Avec des sandboxes pouvant durer 24 heures, les workflows durables doivent aussi savoir s’arrêter précisément.
Ce qui change
Un workflow crée un AbortController, transmet son signal aux steps et appelle abort() après un timeout, une course, un hook ou une règle de quota. Le signal est durable à travers suspensions, replays déterministes et invocations séparées.
L’annulation est coopérative: le step doit passer le signal à fetch, appeler signal.throwIfAborted(), vérifier signal.aborted ou écouter l’événement.
Pourquoi c’est important
Les workflows OCR, rapports, agents multi-modèles, automatisation navigateur et tests longs bénéficient de fenêtres plus larges. Sans contrat d’annulation, on obtient des coûts, des ressources bloquées et des états flous.
Les discussions communautaires sur production-ready et cleanup confirment que le sujet est l’exploitation.
Impact
Les timeouts deviennent des règles produit. Les tâches parallèles peuvent stopper les perdants. Les erreurs d’abort évitent les retries inutiles et clarifient les incidents.
Checklist
Définir utilisateur, timeout, admin, quota, parent request.
Propager le signal dans chaque step coûteux.
Séparer run.cancel() et AbortSignal.
Stocker cancelled_by_user, timed_out, quota_exceeded.
Tester les effets partiels externes.
Risques
SDK 5 est beta/pre-release: commencer petit, verrouiller les versions, prévoir rollback.
AbortSignal n’annule pas magiquement les side effects distants.
Action
Cartographiez les étapes qui coûtent, mutent l’extérieur ou ne doivent pas être rejouées avant d’adopter l’API.
Vérification en 30 minutes
✓ Les raisons d’annulation sont nommées
✓ Chaque étape coûteuse reçoit ou vérifie un signal
✓ Abort et retry sont cohérents
✓ Les effets externes ont des clés d’idempotence
✓ L’observabilité distingue cancelled et failed
const controller = new AbortController();
const result = await Promise.race([
expensiveStep(controller.signal),
sleep("30s").then(() => null),
]);
if (result === null) controller.abort();
Sources et références
- Vercel Changelog: Workflow SDK now supports inflight cancellation
- Workflow SDK v5 docs: Cancellation
- MDN: AbortController
- MDN: AbortSignal.any()
- Vercel Changelog: Vercel Sandbox can now run for up to 24 hours
- Reddit r/vercel: Is Workflow Development Kit production ready?
- Reddit r/vercel: Workflow devkit cleanup/cancel discussion
- Reddit r/vercel: 30 minute Functions and 24 hour Sandbox