docs: private void processOperations(
              final Consumer<WorkflowSystem.OperationResult<DAT, RES, OP>> resultConsumer
      )
      {
          int origPendingCount = pending.size();
  
          //operations which match runnable conditions
          List<OP> shouldrun = pending.stream()
                                      .filter(input -> input.shouldRun(workflowEngine.getState()))
                                      .collect(Collectors.toList());
  
          //runnable that should be skipped
          List<OP> shouldskip = shouldrun.stream()
                                         .filter(input -> input.shouldSkip(workflowEngine.getState()))
                                         .collect(Collectors.toList());
  
          //shared data
          DAT inputData = null != sharedData ? sharedData.produceNext() : null;
  
  
          processRunnableOperations(resultConsumer, shouldrun, shouldskip, inputData);
  
          processSkippedOperations(shouldskip);
  
          pending.removeAll(shouldskip);
          skipped.addAll(shouldskip);
  
          workflowEngine.eventLoopProgress(origPendingCount, shouldskip.size(), shouldrun.size(), pending.size());
      }