Business Process/Linter Rules

Loop Without Wait State

Memperingatkan pengulangan (loop) yang tidak pernah menunggu, sehingga berpotensi berjalan tanpa henti.

AtributNilai
Rule IDloop-without-wait-state
SeverityWarning — disarankan diperbaiki
Elemen yang dicekSiklus (loop) di dalam process atau sub-process
SumberPlugin linter AlurKerja (bpmnlint-plugin-alurkerja)

Rule Loop Without Wait State mendeteksi pengulangan (loop) yang seluruh langkahnya berjalan otomatis tanpa satu pun titik tunggu — tidak ada pengguna, pesan, maupun timer yang ditunggu. Bila kondisi keluar dari loop tidak pernah terpenuhi, engine akan menjalankannya terus-menerus.

Pesan di Studio

Temuan rule ini tampil di panel Problems BPMN Editor dengan pesan berikut:

  • Potential infinite loop through "<elemen 1>", "<elemen 2>", "<elemen 3>" and N more: it never waits for a user, message or timer, so if its exit condition is never met it runs forever. Add a retry limit or a wait state such as a timer

Kenapa ini masalah

Loop otomatis tanpa titik tunggu dijalankan engine tanpa jeda. Loop sinkron akan menahan satu thread terus-menerus, sedangkan loop asinkron (asyncBefore/asyncAfter) akan membanjiri antrean job. Pola ini pernah menyebabkan AlurKerja down, sehingga perlu dicegah sebelum BPMN di-deploy.

Cara memperbaiki

  1. Tambahkan batas percobaan — simpan penghitung (misalnya variabel attempt) yang bertambah setiap putaran, lalu tambahkan cabang keluar di Exclusive Gateway, misalnya ${attempt >= 3}, menuju penanganan gagal atau End Event.
  2. Atau tambahkan titik tunggu di dalam loop, misalnya Timer Intermediate Catch Event sebagai jeda sebelum mencoba ulang, atau User Task untuk pengecekan manual.
  3. Pastikan kondisi keluar dari loop benar-benar dapat terpenuhi.

Catatan

Yang dianggap titik tunggu

Loop tidak dilaporkan bila di jalurnya ada salah satu dari: User Task, Receive Task, Call Activity, Event-based Gateway, Intermediate Catch Event bertipe Timer, Message, Signal, atau Conditional, boundary event bertipe tunggu, Service Task bertipe External Task, atau sub-process yang di dalamnya terdapat titik tunggu.

asyncBefore/asyncAfter tidak dihitung sebagai titik tunggu, karena hanya memindahkan pengulangan ke antrean job. Pasangan Link Event (throw → catch) ikut dihitung sebagai bagian dari loop.

Tentang temuan

Temuan muncul di setiap elemen yang membentuk loop, dan pesannya menyebut paling banyak tiga nama elemen. Loop yang berisi task generik dilewati, karena task tersebut sudah dilaporkan oleh No Generic Task. Severity rule ini Warning, karena terpenuhi atau tidaknya kondisi keluar hanya dapat dipastikan saat proses berjalan.

Rule terkait