where(function ($q) { $q ->whereIn('status', [ProvisioningRun::STATUS_RUNNING, ProvisioningRun::STATUS_WAITING]) ->orWhere(fn ($stranded) => $stranded ->where('status', ProvisioningRun::STATUS_PENDING) ->where('created_at', '<=', now()->subMinutes(self::STRANDED_AFTER_MINUTES))); }) ->where(function ($q) { $q->whereNull('next_attempt_at')->orWhere('next_attempt_at', '<=', now()); }) ->get() ->each(fn (ProvisioningRun $run) => AdvanceRunJob::dispatch($run->uuid)); } }