Workflow SDK 5: pekerjaan AI panjang butuh kontrak pembatalan
Masalah pekerjaan AI yang panjang bukan hanya durasi. Masalahnya muncul saat tim tidak tahu apa yang masih berjalan setelah cancel. Model masih dipanggil, upload masih selesai, atau retry tetap menghabiskan biaya.
Pada 16 Juni 2026 Vercel mengumumkan Workflow SDK 5 beta mendukung AbortController dan AbortSignal lintas workflow dan step. Ketika sandbox juga bisa berjalan lebih lama, workflow agentik perlu cara berhenti yang lebih presisi.
Apa yang berubah
Workflow dapat membuat AbortController, mengirim signal ke step, lalu memanggil abort() saat timeout, race, hook pengguna, atau monitor kuota menang. Dokumentasi menyebut signal ini durable lintas suspension, replay, dan invocation terpisah.
Cancellation bersifat cooperative. Step harus mengoper signal ke fetch/API yang mendukung, memanggil signal.throwIfAborted(), atau memeriksa signal.aborted.
Mengapa penting
OCR, report generation, browser automation, agent multi-model, dan test pipeline butuh runtime panjang. Tanpa kontrak pembatalan, biaya token, API call, resource lock, dan status ambigu meningkat.
Diskusi komunitas soal production-ready dan cleanup menunjukkan kebutuhan model operasi, bukan sekadar contoh kode.
Dampak operasi
Timeout menjadi kebijakan produk. Parallel work bisa membatalkan yang kalah. Abort error yang tidak diretry membantu membedakan cancel sengaja dari failure.
Checklist
Tentukan sumber cancel: user, timeout, admin, kuota, parent request.
Pastikan step mahal menerima signal.
Bedakan run.cancel() dan AbortSignal.
Simpan status cancelled_by_user, timed_out, quota_exceeded.
Uji cleanup upload, job eksternal, email, webhook.
Risiko
SDK 5 masih beta/pre-release; mulai dari workflow internal dan siapkan rollback.
Signal tidak membatalkan side effect jarak jauh secara ajaib.
Langkah sekarang
Petakan boundary cancel sebelum menambahkan tombol: biaya, mutasi eksternal, dan operasi non-idempotent.
Cek 30 menit
✓ Alasan pembatalan diberi nama jelas
✓ Setiap step mahal menerima atau memeriksa signal
✓ Abort dan retry tidak bertabrakan
✓ Side effect eksternal punya idempotency key
✓ Observability memisahkan cancelled dan failed
const controller = new AbortController();
const result = await Promise.race([
expensiveStep(controller.signal),
sleep("30s").then(() => null),
]);
if (result === null) controller.abort();
Sumber dan bacaan
- 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