docs: @Override
    public ExecutionEntity createProcessInstanceExecution(ProcessDefinition processDefinition, String businessKey, String tenantId, String initiatorVariableName) {
      ExecutionEntity processInstanceExecution = executionDataManager.create();
      
      if (isExecutionRelatedEntityCountEnabledGlobally()) {
        ((CountingExecutionEntity) processInstanceExecution).setCountEnabled(true);
      }
      
      processInstanceExecution.setProcessDefinitionId(processDefinition.getId());
      processInstanceExecution.setProcessDefinitionKey(processDefinition.getKey());
      processInstanceExecution.setProcessDefinitionName(processDefinition.getName());
      processInstanceExecution.setProcessDefinitionVersion(processDefinition.getVersion());
      processInstanceExecution.setBusinessKey(businessKey);
      processInstanceExecution.setScope(true); // process instance is always a scope for all child executions
  
      // Inherit tenant id (if any)
      if (tenantId != null) {
        processInstanceExecution.setTenantId(tenantId);
      }
  
      String authenticatedUserId = Authentication.getAuthenticatedUserId();
  
      processInstanceExecution.setStartTime(Context.getProcessEngineConfiguration().getClock().getCurrentTime());
      processInstanceExecution.setStartUserId(authenticatedUserId);
  
      // Store in database
      insert(processInstanceExecution, false);
  
      if (initiatorVariableName != null) {
        processInstanceExecution.setVariable(initiatorVariableName, authenticatedUserId);
      }
  
      // Need to be after insert, cause we need the id
      processInstanceExecution.setProcessInstanceId(processInstanceExecution.getId());
      processInstanceExecution.setRootProcessInstanceId(processInstanceExecution.getId());
      if (authenticatedUserId != null) {
        getIdentityLinkEntityManager().addIdentityLink(processInstanceExecution, authenticatedUserId, null, IdentityLinkType.STARTER);
      }
      
      // Fire events
      if (getEventDispatcher().isEnabled()) {
        getEventDispatcher().dispatchEvent(ActivitiEventBuilder.createEntityEvent(ActivitiEventType.ENTITY_CREATED, processInstanceExecution));
      }
  
      return processInstanceExecution;
    }