This is an automated email from the ASF dual-hosted git repository.

fjtiradosarti pushed a commit to branch main
in repository 
https://gitbox.apache.org/repos/asf/incubator-kie-kogito-runtimes.git


The following commit(s) were added to refs/heads/main by this push:
     new 8be0ba30ee [Fix apache/incubator-kie-issues#1857] Adding triggerCount 
(#3858)
8be0ba30ee is described below

commit 8be0ba30ee4e7abc61b1a9fe2c6d099df63f613b
Author: Francisco Javier Tirado Sarti 
<[email protected]>
AuthorDate: Tue Mar 18 13:48:00 2025 +0100

    [Fix apache/incubator-kie-issues#1857] Adding triggerCount (#3858)
    
    * [Fix apache/incubator-kie-issues#1857] Adding triggerCount
    
    Adds triggerCount to ProcessInstanceNode events
    [Fix apache/incubator-kie-issues#1857] Adding triggerCount
    
    Adds triggerCount to ProcessInstanceNode events
    
    * [Fix apache/incubator-kie-issues#1857] Adding isRetrigger
    
    * [Fix apache/incubator-kie-issues#1857] Clearing error
    
    * [Fix apache/incubator-kie-issues#1857] Renaming isTrigger to trigger
    
    * [Fix apache/incubator-kie-issues#1857] Pere's comment
---
 .../BaseProcessInstanceManagementResource.java     |  12 +-
 .../exceptions/BaseExceptionHandlerTest.java       |   2 +-
 .../process/event/KogitoProcessEventListener.java  |   5 +
 .../process/event/KogitoProcessEventSupport.java   |   2 +
 .../process/runtime/KogitoNodeInstance.java        |   7 +
 .../java/org/kie/kogito/process/ProcessError.java  |   2 +
 .../org/kie/kogito/process/ProcessInstance.java    |   2 +-
 .../process/ProcessInstanceExecutionException.java |  16 +-
 .../uow/events/UnitOfWorkProcessEventListener.java |   6 +
 .../process/ProcessInstanceNodeEventBody.java      |  13 +
 .../process/ProcessInstanceStateEventBody.java     |   1 +
 .../impl/adapter/AbstractDataEventAdapter.java     |  13 +-
 .../ProcessRetriggeredEventDataEventAdapter.java}  |  20 +-
 ....kie.kogito.event.impl.adapter.DataEventAdapter |   1 +
 .../event/KogitoProcessEventSupportImpl.java       |   7 +
 .../event/KogitoProcessNodeTriggeredEventImpl.java |  13 +-
 ...tImpl.java => ProcessRetriggeredEventImpl.java} |  18 +-
 .../org/jbpm/workflow/instance/NodeInstance.java   |   2 +
 .../workflow/instance/impl/NodeInstanceImpl.java   |  15 +-
 .../instance/impl/WorkflowProcessInstanceImpl.java |   5 +
 .../process/impl/AbstractProcessInstance.java      |  26 +-
 .../impl/ProtobufProcessInstanceReader.java        |   7 +
 .../impl/ProtobufProcessInstanceWriter.java        |   6 +-
 .../KogitoNodeInstanceContentsProtobuf.java        |   2 +-
 .../protobuf/KogitoProcessInstanceProtobuf.java    | 393 ++++++++++++++++-----
 .../protobuf/KogitoTypesProtobuf.java              | 163 +++++++--
 .../protobuf/KogitoWorkItemsProtobuf.java          |   2 +-
 .../protobuf/kogito_process_instance.proto         |   1 +
 .../flow/serialization/protobuf/kogito_types.proto |   1 +
 .../kie/kogito/codegen/tests/PublishEventIT.java   |   9 +-
 30 files changed, 607 insertions(+), 165 deletions(-)

diff --git 
a/addons/common/process-management/src/main/java/org/kie/kogito/process/management/BaseProcessInstanceManagementResource.java
 
b/addons/common/process-management/src/main/java/org/kie/kogito/process/management/BaseProcessInstanceManagementResource.java
index 43514088cf..727ccebfb9 100644
--- 
a/addons/common/process-management/src/main/java/org/kie/kogito/process/management/BaseProcessInstanceManagementResource.java
+++ 
b/addons/common/process-management/src/main/java/org/kie/kogito/process/management/BaseProcessInstanceManagementResource.java
@@ -168,7 +168,7 @@ public abstract class 
BaseProcessInstanceManagementResource<T> implements Proces
             processInstance.error().get().retrigger();
 
             if (processInstance.status() == ProcessInstance.STATE_ERROR) {
-                throw new 
ProcessInstanceExecutionException(processInstance.id(), 
processInstance.error().get().failedNodeId(), 
processInstance.error().get().errorMessage());
+                throw 
ProcessInstanceExecutionException.fromError(processInstance);
             } else {
                 return buildOkResponse(processInstance.variables());
             }
@@ -181,7 +181,7 @@ public abstract class 
BaseProcessInstanceManagementResource<T> implements Proces
             processInstance.error().get().skip();
 
             if (processInstance.status() == ProcessInstance.STATE_ERROR) {
-                throw new 
ProcessInstanceExecutionException(processInstance.id(), 
processInstance.error().get().failedNodeId(), 
processInstance.error().get().errorMessage());
+                throw 
ProcessInstanceExecutionException.fromError(processInstance);
             } else {
                 return buildOkResponse(processInstance.variables());
             }
@@ -194,7 +194,7 @@ public abstract class 
BaseProcessInstanceManagementResource<T> implements Proces
             processInstance.triggerNode(nodeId);
 
             if (processInstance.status() == ProcessInstance.STATE_ERROR) {
-                throw new 
ProcessInstanceExecutionException(processInstance.id(), 
processInstance.error().get().failedNodeId(), 
processInstance.error().get().errorMessage());
+                throw 
ProcessInstanceExecutionException.fromError(processInstance);
             } else {
                 return buildOkResponse(processInstance.variables());
             }
@@ -207,7 +207,7 @@ public abstract class 
BaseProcessInstanceManagementResource<T> implements Proces
             processInstance.retriggerNodeInstance(nodeInstanceId);
 
             if (processInstance.status() == ProcessInstance.STATE_ERROR) {
-                throw new 
ProcessInstanceExecutionException(processInstance.id(), 
processInstance.error().get().failedNodeId(), 
processInstance.error().get().errorMessage());
+                throw 
ProcessInstanceExecutionException.fromError(processInstance);
             } else {
                 return buildOkResponse(processInstance.variables());
             }
@@ -220,7 +220,7 @@ public abstract class 
BaseProcessInstanceManagementResource<T> implements Proces
             processInstance.cancelNodeInstance(nodeInstanceId);
 
             if (processInstance.status() == ProcessInstance.STATE_ERROR) {
-                throw new 
ProcessInstanceExecutionException(processInstance.id(), 
processInstance.error().get().failedNodeId(), 
processInstance.error().get().errorMessage());
+                throw 
ProcessInstanceExecutionException.fromError(processInstance);
             } else {
                 return buildOkResponse(processInstance.variables());
             }
@@ -233,7 +233,7 @@ public abstract class 
BaseProcessInstanceManagementResource<T> implements Proces
             processInstance.abort();
 
             if (processInstance.status() == ProcessInstance.STATE_ERROR) {
-                throw new 
ProcessInstanceExecutionException(processInstance.id(), 
processInstance.error().get().failedNodeId(), 
processInstance.error().get().errorMessage());
+                throw 
ProcessInstanceExecutionException.fromError(processInstance);
             } else {
                 return buildOkResponse(processInstance.variables());
             }
diff --git 
a/addons/common/rest-exception-handler/src/test/java/org/kie/kogito/resource/exceptions/BaseExceptionHandlerTest.java
 
b/addons/common/rest-exception-handler/src/test/java/org/kie/kogito/resource/exceptions/BaseExceptionHandlerTest.java
index bf8f28fc31..cdf584d2ec 100644
--- 
a/addons/common/rest-exception-handler/src/test/java/org/kie/kogito/resource/exceptions/BaseExceptionHandlerTest.java
+++ 
b/addons/common/rest-exception-handler/src/test/java/org/kie/kogito/resource/exceptions/BaseExceptionHandlerTest.java
@@ -119,7 +119,7 @@ class BaseExceptionHandlerTest {
 
     @Test
     void testMapProcessInstanceExecutionException() {
-        Object response = tested.mapException(new 
ProcessInstanceExecutionException("processInstanceId", "nodeId", "message"));
+        Object response = tested.mapException(new 
ProcessInstanceExecutionException("processInstanceId", "nodeId", 
"nodeInstanceId", "message"));
         assertThat(response).isEqualTo(internalErrorResponse);
     }
 
diff --git 
a/api/kogito-api/src/main/java/org/kie/kogito/internal/process/event/KogitoProcessEventListener.java
 
b/api/kogito-api/src/main/java/org/kie/kogito/internal/process/event/KogitoProcessEventListener.java
index 5bdbb74b78..6ec6c074a5 100644
--- 
a/api/kogito-api/src/main/java/org/kie/kogito/internal/process/event/KogitoProcessEventListener.java
+++ 
b/api/kogito-api/src/main/java/org/kie/kogito/internal/process/event/KogitoProcessEventListener.java
@@ -19,6 +19,7 @@
 package org.kie.kogito.internal.process.event;
 
 import org.kie.api.event.process.ProcessEventListener;
+import org.kie.api.event.process.ProcessRetriggeredEvent;
 
 public interface KogitoProcessEventListener extends ProcessEventListener {
 
@@ -37,4 +38,8 @@ public interface KogitoProcessEventListener extends 
ProcessEventListener {
      */
     default void afterWorkItemTransition(ProcessWorkItemTransitionEvent event) 
{
     }
+
+    default void onProcessRetriggered(ProcessRetriggeredEvent event) {
+
+    }
 }
diff --git 
a/api/kogito-api/src/main/java/org/kie/kogito/internal/process/event/KogitoProcessEventSupport.java
 
b/api/kogito-api/src/main/java/org/kie/kogito/internal/process/event/KogitoProcessEventSupport.java
index 573f67c012..77565641b0 100644
--- 
a/api/kogito-api/src/main/java/org/kie/kogito/internal/process/event/KogitoProcessEventSupport.java
+++ 
b/api/kogito-api/src/main/java/org/kie/kogito/internal/process/event/KogitoProcessEventSupport.java
@@ -32,6 +32,8 @@ public interface KogitoProcessEventSupport {
 
     void fireAfterProcessStarted(KogitoProcessInstance instance, KieRuntime 
kruntime);
 
+    void fireProcessRetriggered(KogitoProcessInstance instance, KieRuntime 
kruntime);
+
     void fireBeforeProcessCompleted(KogitoProcessInstance instance, KieRuntime 
kruntime);
 
     void fireAfterProcessCompleted(KogitoProcessInstance instance, KieRuntime 
kruntime);
diff --git 
a/api/kogito-api/src/main/java/org/kie/kogito/internal/process/runtime/KogitoNodeInstance.java
 
b/api/kogito-api/src/main/java/org/kie/kogito/internal/process/runtime/KogitoNodeInstance.java
index a1483dd85e..fc6e46a190 100644
--- 
a/api/kogito-api/src/main/java/org/kie/kogito/internal/process/runtime/KogitoNodeInstance.java
+++ 
b/api/kogito-api/src/main/java/org/kie/kogito/internal/process/runtime/KogitoNodeInstance.java
@@ -75,4 +75,11 @@ public interface KogitoNodeInstance extends NodeInstance {
     default Map<String, Object> getMetaData() {
         return Collections.emptyMap();
     }
+
+    /**
+     * Returns if this node has been executed as the first one of a retrigger 
operation
+     * 
+     * @return true if this a retrigger node (see above), false otherwise
+     */
+    boolean isRetrigger();
 }
diff --git 
a/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessError.java 
b/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessError.java
index 486b0336fe..ca58da6290 100644
--- a/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessError.java
+++ b/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessError.java
@@ -22,6 +22,8 @@ public interface ProcessError {
 
     String failedNodeId();
 
+    String failedNodeInstanceId();
+
     String errorMessage();
 
     default Throwable errorCause() {
diff --git 
a/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessInstance.java 
b/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessInstance.java
index c9741de02b..384efbb98e 100644
--- a/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessInstance.java
+++ b/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessInstance.java
@@ -256,7 +256,7 @@ public interface ProcessInstance<T> {
     default ProcessInstance<T> checkError() {
         Optional<ProcessError> error = error();
         if (error.isPresent()) {
-            throw new ProcessInstanceExecutionException(id(), 
error.get().failedNodeId(), error.get().errorMessage(), 
error.get().errorCause());
+            throw ProcessInstanceExecutionException.fromError(this);
         }
         return this;
     }
diff --git 
a/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessInstanceExecutionException.java
 
b/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessInstanceExecutionException.java
index 04d1732b43..aef2bd3868 100644
--- 
a/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessInstanceExecutionException.java
+++ 
b/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessInstanceExecutionException.java
@@ -29,16 +29,18 @@ public class ProcessInstanceExecutionException extends 
RuntimeException {
 
     private final String processInstanceId;
     private final String failedNodeId;
+    private final String failedNodeInstanceId;
     private final String errorMessage;
 
-    public ProcessInstanceExecutionException(String processInstanceId, String 
failedNodeId, String errorMessage) {
-        this(processInstanceId, failedNodeId, errorMessage, null);
+    public ProcessInstanceExecutionException(String processInstanceId, String 
failedNodeId, String failedNodeInstanceId, String errorMessage) {
+        this(processInstanceId, failedNodeId, failedNodeInstanceId, 
errorMessage, null);
     }
 
-    public ProcessInstanceExecutionException(String processInstanceId, String 
failedNodeId, String errorMessage, Throwable rootCause) {
+    public ProcessInstanceExecutionException(String processInstanceId, String 
failedNodeId, String failedNodeInstanceId, String errorMessage, Throwable 
rootCause) {
         super("Process instance with id " + processInstanceId + " failed 
because of " + errorMessage, rootCause);
         this.processInstanceId = processInstanceId;
         this.failedNodeId = failedNodeId;
+        this.failedNodeInstanceId = failedNodeInstanceId;
         this.errorMessage = errorMessage;
     }
 
@@ -70,4 +72,12 @@ public class ProcessInstanceExecutionException extends 
RuntimeException {
         return errorMessage;
     }
 
+    public String getFailedNodeInstanceId() {
+        return failedNodeInstanceId;
+    }
+
+    public static ProcessInstanceExecutionException 
fromError(ProcessInstance<?> processInstance) {
+        ProcessError error = processInstance.error().get();
+        return new ProcessInstanceExecutionException(processInstance.id(), 
error.failedNodeId(), error.failedNodeInstanceId(), error.errorMessage(), 
error.errorCause());
+    }
 }
diff --git 
a/api/kogito-api/src/main/java/org/kie/kogito/uow/events/UnitOfWorkProcessEventListener.java
 
b/api/kogito-api/src/main/java/org/kie/kogito/uow/events/UnitOfWorkProcessEventListener.java
index f9b1a8868f..ddc09ec964 100644
--- 
a/api/kogito-api/src/main/java/org/kie/kogito/uow/events/UnitOfWorkProcessEventListener.java
+++ 
b/api/kogito-api/src/main/java/org/kie/kogito/uow/events/UnitOfWorkProcessEventListener.java
@@ -25,6 +25,7 @@ import org.kie.api.event.process.ProcessEvent;
 import org.kie.api.event.process.ProcessMigrationEvent;
 import org.kie.api.event.process.ProcessNodeLeftEvent;
 import org.kie.api.event.process.ProcessNodeTriggeredEvent;
+import org.kie.api.event.process.ProcessRetriggeredEvent;
 import org.kie.api.event.process.ProcessStartedEvent;
 import org.kie.api.event.process.ProcessVariableChangedEvent;
 import org.kie.api.event.process.SLAViolatedEvent;
@@ -136,4 +137,9 @@ public class UnitOfWorkProcessEventListener extends 
DefaultKogitoProcessEventLis
         intercept(event);
     }
 
+    @Override
+    public void onProcessRetriggered(ProcessRetriggeredEvent event) {
+        intercept(event);
+    }
+
 }
diff --git 
a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceNodeEventBody.java
 
b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceNodeEventBody.java
index 349a8280b8..d921431558 100644
--- 
a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceNodeEventBody.java
+++ 
b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceNodeEventBody.java
@@ -76,6 +76,8 @@ public class ProcessInstanceNodeEventBody implements 
KogitoMarshallEventSupport,
 
     private Date slaDueDate;
 
+    private Boolean retrigger;
+
     private Map<String, Object> data;
 
     @Override
@@ -89,6 +91,7 @@ public class ProcessInstanceNodeEventBody implements 
KogitoMarshallEventSupport,
         writeUTF(out, workItemId);
         writeDate(out, slaDueDate);
         writeObject(out, data);
+        writeObject(out, retrigger);
     }
 
     @Override
@@ -102,6 +105,7 @@ public class ProcessInstanceNodeEventBody implements 
KogitoMarshallEventSupport,
         workItemId = readUTF(in);
         slaDueDate = readDate(in);
         data = (Map<String, Object>) readObject(in);
+        retrigger = (Boolean) readObject(in);
     }
 
     @Override
@@ -121,6 +125,10 @@ public class ProcessInstanceNodeEventBody implements 
KogitoMarshallEventSupport,
         return eventDate;
     }
 
+    public Boolean isRetrigger() {
+        return retrigger;
+    }
+
     public String getEventUser() {
         return eventUser;
     }
@@ -258,6 +266,11 @@ public class ProcessInstanceNodeEventBody implements 
KogitoMarshallEventSupport,
             return this;
         }
 
+        public Builder setRetrigger(Boolean isRetrigger) {
+            instance.retrigger = isRetrigger;
+            return this;
+        }
+
         public Builder nodeType(String nodeType) {
             instance.nodeType = nodeType;
             return this;
diff --git 
a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceStateEventBody.java
 
b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceStateEventBody.java
index 8c7c291110..c57e335811 100644
--- 
a/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceStateEventBody.java
+++ 
b/api/kogito-events-api/src/main/java/org/kie/kogito/event/process/ProcessInstanceStateEventBody.java
@@ -37,6 +37,7 @@ public class ProcessInstanceStateEventBody implements 
KogitoMarshallEventSupport
     public static final int EVENT_TYPE_STARTED = 1;
     public static final int EVENT_TYPE_ENDED = 2;
     public static final int EVENT_TYPE_MIGRATED = 3;
+    public static final int EVENT_TYPE_RETRIGGERED = 4;
 
     // common fields for events
     private Date eventDate;
diff --git 
a/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/AbstractDataEventAdapter.java
 
b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/AbstractDataEventAdapter.java
index 77f1c856ba..297ef7d6d7 100644
--- 
a/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/AbstractDataEventAdapter.java
+++ 
b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/AbstractDataEventAdapter.java
@@ -20,9 +20,11 @@ package org.kie.kogito.event.impl.adapter;
 
 import java.util.Date;
 import java.util.Map;
+import java.util.function.BiConsumer;
 
 import org.kie.api.event.process.ProcessEvent;
 import org.kie.api.event.process.ProcessNodeEvent;
+import org.kie.api.event.process.ProcessNodeTriggeredEvent;
 import org.kie.kogito.event.process.ProcessInstanceNodeDataEvent;
 import org.kie.kogito.event.process.ProcessInstanceNodeEventBody;
 import org.kie.kogito.event.process.ProcessInstanceStateDataEvent;
@@ -91,7 +93,16 @@ public abstract class AbstractDataEventAdapter implements 
DataEventAdapter {
         return piEvent;
     }
 
+    protected ProcessInstanceNodeDataEvent 
toProcessInstanceNodeEvent(ProcessNodeTriggeredEvent event, int eventType) {
+        return toProcessInstanceNodeEvent(event, eventType, (k, v) -> 
k.setRetrigger(v.isRetrigger()));
+    }
+
     protected ProcessInstanceNodeDataEvent 
toProcessInstanceNodeEvent(ProcessNodeEvent event, int eventType) {
+        return toProcessInstanceNodeEvent(event, eventType, (k, v) -> {
+        });
+    }
+
+    protected <T extends ProcessNodeEvent> ProcessInstanceNodeDataEvent 
toProcessInstanceNodeEvent(T event, int eventType, 
BiConsumer<ProcessInstanceNodeEventBody.Builder, T> consumer) {
         Map<String, Object> metadata = 
AdapterHelper.buildProcessMetadata((KogitoWorkflowProcessInstance) 
event.getProcessInstance());
         KogitoWorkflowProcessInstance pi = (KogitoWorkflowProcessInstance) 
event.getProcessInstance();
         KogitoNodeInstance nodeInstance = (KogitoNodeInstance) 
event.getNodeInstance();
@@ -107,7 +118,7 @@ public abstract class AbstractDataEventAdapter implements 
DataEventAdapter {
                 .nodeInstanceId(event.getNodeInstance().getId())
                 
.nodeDefinitionId(event.getNodeInstance().getNode().getUniqueId())
                 .slaDueDate(nodeInstance.getSlaDueDate());
-
+        consumer.accept(builder, event);
         if (event.getNodeInstance() instanceof KogitoWorkItemNodeInstance 
workItemNodeInstance && workItemNodeInstance.getWorkItem() != null) {
             KogitoWorkItem workItem = workItemNodeInstance.getWorkItem();
             builder.workItemId(workItem.getStringId());
diff --git 
a/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessError.java 
b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/ProcessRetriggeredEventDataEventAdapter.java
similarity index 58%
copy from api/kogito-api/src/main/java/org/kie/kogito/process/ProcessError.java
copy to 
api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/ProcessRetriggeredEventDataEventAdapter.java
index 486b0336fe..6f1b78a136 100644
--- a/api/kogito-api/src/main/java/org/kie/kogito/process/ProcessError.java
+++ 
b/api/kogito-events-core/src/main/java/org/kie/kogito/event/impl/adapter/ProcessRetriggeredEventDataEventAdapter.java
@@ -16,19 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.kie.kogito.process;
+package org.kie.kogito.event.impl.adapter;
 
-public interface ProcessError {
+import org.kie.api.event.process.ProcessRetriggeredEvent;
+import org.kie.kogito.event.DataEvent;
+import org.kie.kogito.event.process.ProcessInstanceStateEventBody;
 
-    String failedNodeId();
+public class ProcessRetriggeredEventDataEventAdapter extends 
AbstractDataEventAdapter {
 
-    String errorMessage();
-
-    default Throwable errorCause() {
-        return null;
+    public ProcessRetriggeredEventDataEventAdapter() {
+        super(ProcessRetriggeredEvent.class);
     }
 
-    void retrigger();
+    @Override
+    public DataEvent<?> adapt(Object payload) {
+        return adapt((ProcessRetriggeredEvent) payload, 
ProcessInstanceStateEventBody.EVENT_TYPE_RETRIGGERED);
+    }
 
-    void skip();
 }
diff --git 
a/api/kogito-events-core/src/main/resources/META-INF/services/org.kie.kogito.event.impl.adapter.DataEventAdapter
 
b/api/kogito-events-core/src/main/resources/META-INF/services/org.kie.kogito.event.impl.adapter.DataEventAdapter
index 644f544a1b..06682d2352 100644
--- 
a/api/kogito-events-core/src/main/resources/META-INF/services/org.kie.kogito.event.impl.adapter.DataEventAdapter
+++ 
b/api/kogito-events-core/src/main/resources/META-INF/services/org.kie.kogito.event.impl.adapter.DataEventAdapter
@@ -5,6 +5,7 @@ 
org.kie.kogito.event.impl.adapter.ProcessNodeEnteredEventDataEventAdapter
 org.kie.kogito.event.impl.adapter.ProcessNodeLeftEventDataEventAdapter
 org.kie.kogito.event.impl.adapter.ProcessSLAEventDataEventAdapter
 org.kie.kogito.event.impl.adapter.ProcessStartedEventDataEventAdapter
+org.kie.kogito.event.impl.adapter.ProcessRetriggeredEventDataEventAdapter
 org.kie.kogito.event.impl.adapter.ProcessVariableEventDataEventAdapter
 org.kie.kogito.event.impl.adapter.UserTaskAssignmentEventDataEventAdapter
 org.kie.kogito.event.impl.adapter.UserTaskCommentEventDataEventAdapter
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/KogitoProcessEventSupportImpl.java
 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/KogitoProcessEventSupportImpl.java
index b6dcfc270e..b03d37b55e 100644
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/KogitoProcessEventSupportImpl.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/KogitoProcessEventSupportImpl.java
@@ -27,6 +27,7 @@ import org.kie.api.event.process.MessageEvent;
 import org.kie.api.event.process.ProcessCompletedEvent;
 import org.kie.api.event.process.ProcessNodeLeftEvent;
 import org.kie.api.event.process.ProcessNodeTriggeredEvent;
+import org.kie.api.event.process.ProcessRetriggeredEvent;
 import org.kie.api.event.process.ProcessStartedEvent;
 import org.kie.api.event.process.ProcessVariableChangedEvent;
 import org.kie.api.event.process.SLAViolatedEvent;
@@ -218,4 +219,10 @@ public class KogitoProcessEventSupportImpl implements 
KogitoProcessEventSupport
         notifyAllListeners(l -> l.onError(event));
     }
 
+    @Override
+    public void fireProcessRetriggered(KogitoProcessInstance instance, 
KieRuntime kruntime) {
+        final ProcessRetriggeredEvent event = new 
ProcessRetriggeredEventImpl(instance, kruntime, identityProvider.getName());
+        notifyAllListeners(l -> l.onProcessRetriggered(event));
+    }
+
 }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/KogitoProcessNodeTriggeredEventImpl.java
 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/KogitoProcessNodeTriggeredEventImpl.java
index f47ae40765..7f31f2a77d 100644
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/KogitoProcessNodeTriggeredEventImpl.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/KogitoProcessNodeTriggeredEventImpl.java
@@ -20,21 +20,28 @@ package org.jbpm.process.instance.event;
 
 import org.kie.api.event.process.ProcessNodeTriggeredEvent;
 import org.kie.api.runtime.KieRuntime;
-import org.kie.api.runtime.process.NodeInstance;
 import org.kie.kogito.internal.process.runtime.KogitoNodeInstance;
 
 public class KogitoProcessNodeTriggeredEventImpl extends 
AbstractProcessNodeEvent implements ProcessNodeTriggeredEvent {
 
     private static final long serialVersionUID = 510l;
 
-    public KogitoProcessNodeTriggeredEventImpl(NodeInstance nodeInstance, 
KieRuntime kruntime, String identity) {
+    private boolean isRetrigger;
+
+    public KogitoProcessNodeTriggeredEventImpl(KogitoNodeInstance 
nodeInstance, KieRuntime kruntime, String identity) {
         super(nodeInstance, nodeInstance.getProcessInstance(), kruntime, 
identity);
+        this.isRetrigger = nodeInstance.isRetrigger();
+    }
 
+    @Override
+    public boolean isRetrigger() {
+        return isRetrigger;
     }
 
     @Override
     public String toString() {
         return "==>[ProcessNodeTriggered(nodeId=" + 
getNodeInstance().getNodeId() + "; id=" + ((KogitoNodeInstance) 
getNodeInstance()).getStringId()
-                + "; nodeName=" + getNodeInstance().getNodeName() + "; 
processName=" + getProcessInstance().getProcessName() + "; processId=" + 
getProcessInstance().getProcessId() + ")]";
+                + "; nodeName=" + getNodeInstance().getNodeName() + "; 
processName=" + getProcessInstance().getProcessName() + "; processId=" + 
getProcessInstance().getProcessId()
+                + "; isRetrigger=" + isRetrigger + ")]";
     }
 }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/KogitoProcessNodeTriggeredEventImpl.java
 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/ProcessRetriggeredEventImpl.java
similarity index 54%
copy from 
jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/KogitoProcessNodeTriggeredEventImpl.java
copy to 
jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/ProcessRetriggeredEventImpl.java
index f47ae40765..aad85feb8d 100644
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/KogitoProcessNodeTriggeredEventImpl.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/process/instance/event/ProcessRetriggeredEventImpl.java
@@ -18,23 +18,21 @@
  */
 package org.jbpm.process.instance.event;
 
-import org.kie.api.event.process.ProcessNodeTriggeredEvent;
+import org.kie.api.event.process.ProcessRetriggeredEvent;
 import org.kie.api.runtime.KieRuntime;
-import org.kie.api.runtime.process.NodeInstance;
-import org.kie.kogito.internal.process.runtime.KogitoNodeInstance;
+import org.kie.api.runtime.process.ProcessInstance;
 
-public class KogitoProcessNodeTriggeredEventImpl extends 
AbstractProcessNodeEvent implements ProcessNodeTriggeredEvent {
+public class ProcessRetriggeredEventImpl extends ProcessEvent implements 
ProcessRetriggeredEvent {
 
     private static final long serialVersionUID = 510l;
 
-    public KogitoProcessNodeTriggeredEventImpl(NodeInstance nodeInstance, 
KieRuntime kruntime, String identity) {
-        super(nodeInstance, nodeInstance.getProcessInstance(), kruntime, 
identity);
-
+    public ProcessRetriggeredEventImpl(ProcessInstance instance, KieRuntime 
kruntime, String identity) {
+        super(instance, kruntime, identity);
     }
 
     @Override
     public String toString() {
-        return "==>[ProcessNodeTriggered(nodeId=" + 
getNodeInstance().getNodeId() + "; id=" + ((KogitoNodeInstance) 
getNodeInstance()).getStringId()
-                + "; nodeName=" + getNodeInstance().getNodeName() + "; 
processName=" + getProcessInstance().getProcessName() + "; processId=" + 
getProcessInstance().getProcessId() + ")]";
+        return "==>[ProcessRetriggered(name=" + 
getProcessInstance().getProcessName() + "; id=" + 
getProcessInstance().getProcessId() + ")]";
     }
-}
+
+}
\ No newline at end of file
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/NodeInstance.java 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/NodeInstance.java
index bb4109242f..62aafe6eaf 100755
--- a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/NodeInstance.java
+++ b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/NodeInstance.java
@@ -37,6 +37,8 @@ public interface NodeInstance extends KogitoNodeInstance {
 
     void trigger(KogitoNodeInstance from, String type);
 
+    void retrigger(boolean remove);
+
     void cancel();
 
     void cancel(CancelType type);
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/NodeInstanceImpl.java
 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/NodeInstanceImpl.java
index b7e6e07307..b9698aacc2 100755
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/NodeInstanceImpl.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/NodeInstanceImpl.java
@@ -93,6 +93,7 @@ public abstract class NodeInstanceImpl implements 
org.jbpm.workflow.instance.Nod
     protected String slaTimerId;
     protected Date triggerTime;
     protected Date leaveTime;
+    protected boolean isRetrigger;
 
     protected transient CancelType cancelType;
 
@@ -112,6 +113,11 @@ public abstract class NodeInstanceImpl implements 
org.jbpm.workflow.instance.Nod
         return this.id;
     }
 
+    @Override
+    public boolean isRetrigger() {
+        return isRetrigger;
+    }
+
     public void setNodeId(WorkflowElementIdentifier nodeId) {
         this.nodeId = nodeId;
     }
@@ -257,7 +263,7 @@ public abstract class NodeInstanceImpl implements 
org.jbpm.workflow.instance.Nod
                 return;
             } else {
                 logger.error("Node instance causing process instance error in 
id {} in a transactional environment (Wrapping)", this.getStringId());
-                throw new 
ProcessInstanceExecutionException(this.getProcessInstance().getId(), 
this.getNodeDefinitionId(), e.getMessage(), e);
+                throw new 
ProcessInstanceExecutionException(this.getProcessInstance().getId(), 
this.getNodeDefinitionId(), this.getId(), e.getMessage(), e);
             }
             // stop after capturing error
         }
@@ -482,10 +488,12 @@ public abstract class NodeInstanceImpl implements 
org.jbpm.workflow.instance.Nod
         triggerNodeInstance(followConnection(connection), 
connection.getToType());
     }
 
+    @Override
     public void retrigger(boolean remove) {
         if (remove) {
             cancel();
         }
+        isRetrigger = true;
         triggerNode(getNodeId(), !remove);
     }
 
@@ -743,4 +751,9 @@ public abstract class NodeInstanceImpl implements 
org.jbpm.workflow.instance.Nod
             }
         }
     }
+
+    public void internalSetRetrigger(boolean isRetrigger) {
+        this.isRetrigger = isRetrigger;
+
+    }
 }
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java
 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java
index 905d2f7092..8dc6e80822 100755
--- 
a/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/jbpm/workflow/instance/impl/WorkflowProcessInstanceImpl.java
@@ -1323,6 +1323,10 @@ public abstract class WorkflowProcessInstanceImpl 
extends ProcessInstanceImpl im
         this.nodeIdInError = errorNodeId;
     }
 
+    public void internalSetErrorNodeInstanceId(String errorNodeInstanceId) {
+        this.nodeInstanceIdInError = errorNodeInstanceId;
+    }
+
     public void internalSetErrorMessage(String errorMessage) {
         this.errorMessage = errorMessage;
         this.errorCause = Optional.empty();
@@ -1330,6 +1334,7 @@ public abstract class WorkflowProcessInstanceImpl extends 
ProcessInstanceImpl im
 
     public void internalSetError(ProcessInstanceExecutionException e) {
         this.nodeIdInError = e.getFailedNodeId();
+        this.nodeInstanceIdInError = e.getFailedNodeInstanceId();
         Throwable rootException = getRootException(e);
         this.errorMessage = rootException instanceof MessageException ? 
rootException.getMessage() : rootException.getClass().getCanonicalName() + " - 
" + rootException.getMessage();
         this.errorCause = Optional.of(e);
diff --git 
a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessInstance.java
 
b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessInstance.java
index 106208afb0..2c49befddf 100644
--- 
a/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessInstance.java
+++ 
b/jbpm/jbpm-flow/src/main/java/org/kie/kogito/process/impl/AbstractProcessInstance.java
@@ -470,7 +470,6 @@ public abstract class AbstractProcessInstance<T extends 
Model> implements Proces
                 .filter(ni -> ni.getStringId().equals(nodeInstanceId))
                 .findFirst()
                 .orElseThrow(() -> new NodeInstanceNotFoundException(this.id, 
nodeInstanceId));
-
         ((NodeInstanceImpl) nodeInstance).retrigger(true);
         removeOnFinish();
     }
@@ -698,6 +697,7 @@ public abstract class AbstractProcessInstance<T extends 
Model> implements Proces
 
         final String errorMessage = pi.getErrorMessage();
         final String nodeInError = pi.getNodeIdInError();
+        final String nodeInstanceInError = pi.getNodeInstanceIdInError();
         final Throwable errorCause = pi.getErrorCause().orElse(null);
         return new ProcessError() {
 
@@ -706,6 +706,11 @@ public abstract class AbstractProcessInstance<T extends 
Model> implements Proces
                 return nodeInError;
             }
 
+            @Override
+            public String failedNodeInstanceId() {
+                return nodeInstanceInError;
+            }
+
             @Override
             public String errorMessage() {
                 return errorMessage;
@@ -719,14 +724,14 @@ public abstract class AbstractProcessInstance<T extends 
Model> implements Proces
             @Override
             public void retrigger() {
                 WorkflowProcessInstanceImpl pInstance = 
(WorkflowProcessInstanceImpl) processInstance();
-                NodeInstance ni = pInstance.getByNodeDefinitionId(nodeInError, 
pInstance.getNodeContainer());
-                pInstance.setState(STATE_ACTIVE);
-                pInstance.internalSetErrorNodeId(null);
-                pInstance.internalSetErrorMessage(null);
+                NodeInstanceImpl ni = (NodeInstanceImpl) 
pInstance.getByNodeDefinitionId(nodeInError, pInstance.getNodeContainer());
+                clearError(pInstance);
+                
getProcessRuntime().getProcessEventSupport().fireProcessRetriggered(pInstance, 
pInstance.getKnowledgeRuntime());
                 org.kie.api.runtime.process.NodeInstanceContainer 
nodeInstanceContainer = ni.getNodeInstanceContainer();
                 if (nodeInstanceContainer instanceof NodeInstance) {
                     ((NodeInstance) 
nodeInstanceContainer).internalSetTriggerTime(new Date());
                 }
+                ni.internalSetRetrigger(true);
                 ni.trigger(null, Node.CONNECTION_DEFAULT_TYPE);
                 removeOnFinish();
             }
@@ -734,12 +739,17 @@ public abstract class AbstractProcessInstance<T extends 
Model> implements Proces
             @Override
             public void skip() {
                 WorkflowProcessInstanceImpl pInstance = 
(WorkflowProcessInstanceImpl) processInstance();
-                NodeInstance ni = pInstance.getByNodeDefinitionId(nodeInError, 
pInstance.getNodeContainer());
+                NodeInstanceImpl ni = (NodeInstanceImpl) 
pInstance.getByNodeDefinitionId(nodeInError, pInstance.getNodeContainer());
+                clearError(pInstance);
+                ni.triggerCompleted(Node.CONNECTION_DEFAULT_TYPE, true);
+                removeOnFinish();
+            }
+
+            private void clearError(WorkflowProcessInstanceImpl pInstance) {
                 pInstance.setState(STATE_ACTIVE);
                 pInstance.internalSetErrorNodeId(null);
+                pInstance.internalSetErrorNodeInstanceId(null);
                 pInstance.internalSetErrorMessage(null);
-                ((NodeInstanceImpl) 
ni).triggerCompleted(Node.CONNECTION_DEFAULT_TYPE, true);
-                removeOnFinish();
             }
         };
     }
diff --git 
a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/impl/ProtobufProcessInstanceReader.java
 
b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/impl/ProtobufProcessInstanceReader.java
index e42bf3c0a5..1b4594767e 100644
--- 
a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/impl/ProtobufProcessInstanceReader.java
+++ 
b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/impl/ProtobufProcessInstanceReader.java
@@ -155,6 +155,10 @@ public class ProtobufProcessInstanceReader {
             
processInstance.internalSetErrorNodeId(processInstanceProtobuf.getErrorNodeId());
         }
 
+        if (processInstanceProtobuf.hasErrorNodeInstanceId()) {
+            
processInstance.internalSetErrorNodeInstanceId(processInstanceProtobuf.getErrorNodeInstanceId());
+        }
+
         if (processInstanceProtobuf.hasErrorMessage()) {
             
processInstance.internalSetErrorMessage(processInstanceProtobuf.getErrorMessage());
         }
@@ -195,6 +199,9 @@ public class ProtobufProcessInstanceReader {
             nodeInstanceImpl.setProcessInstance(processInstance);
         }
 
+        if (nodeInstanceProtobuf.hasRetrigger())
+            
nodeInstanceImpl.internalSetRetrigger(nodeInstanceProtobuf.getRetrigger());
+
         nodeInstanceImpl.setLevel(nodeInstanceProtobuf.getLevel() == 0 ? 1 : 
nodeInstanceProtobuf.getLevel());
     }
 
diff --git 
a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/impl/ProtobufProcessInstanceWriter.java
 
b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/impl/ProtobufProcessInstanceWriter.java
index 700d7abd42..334cc9e2c3 100644
--- 
a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/impl/ProtobufProcessInstanceWriter.java
+++ 
b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/impl/ProtobufProcessInstanceWriter.java
@@ -125,6 +125,9 @@ public class ProtobufProcessInstanceWriter {
         if (workFlow.getNodeIdInError() != null) {
             instance.setErrorNodeId(workFlow.getNodeIdInError());
         }
+        if (workFlow.getNodeInstanceIdInError() != null) {
+            
instance.setErrorNodeInstanceId(workFlow.getNodeInstanceIdInError());
+        }
         if (workFlow.getErrorMessage() != null) {
             instance.setErrorMessage(workFlow.getErrorMessage());
         }
@@ -198,7 +201,8 @@ public class ProtobufProcessInstanceWriter {
             KogitoTypesProtobuf.NodeInstance.Builder node = 
KogitoTypesProtobuf.NodeInstance.newBuilder()
                     .setId(((KogitoNodeInstance) nodeInstance).getStringId())
                     .setNodeId(nodeInstance.getNodeId().toExternalFormat())
-                    .setLevel(((org.jbpm.workflow.instance.NodeInstance) 
nodeInstance).getLevel());
+                    .setLevel(((org.jbpm.workflow.instance.NodeInstance) 
nodeInstance).getLevel())
+                    .setRetrigger(((org.jbpm.workflow.instance.NodeInstance) 
nodeInstance).isRetrigger());
 
             Date triggerDate = ((org.jbpm.workflow.instance.NodeInstance) 
nodeInstance).getTriggerTime();
             if (triggerDate != null) {
diff --git 
a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoNodeInstanceContentsProtobuf.java
 
b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoNodeInstanceContentsProtobuf.java
index 28878ffc32..d8cbb511db 100644
--- 
a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoNodeInstanceContentsProtobuf.java
+++ 
b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoNodeInstanceContentsProtobuf.java
@@ -19,7 +19,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: 
org/jbpm/flow/serialization/protobuf/kogito_node_instance_contents.proto
 
-// Protobuf Java Version: 3.25.0
+// Protobuf Java Version: 3.25.5
 package org.jbpm.flow.serialization.protobuf;
 
 public final class KogitoNodeInstanceContentsProtobuf {
diff --git 
a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoProcessInstanceProtobuf.java
 
b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoProcessInstanceProtobuf.java
index 1e09647188..5b28d9c7aa 100644
--- 
a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoProcessInstanceProtobuf.java
+++ 
b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoProcessInstanceProtobuf.java
@@ -19,7 +19,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: org/jbpm/flow/serialization/protobuf/kogito_process_instance.proto
 
-// Protobuf Java Version: 3.25.0
+// Protobuf Java Version: 3.25.5
 package org.jbpm.flow.serialization.protobuf;
 
 public final class KogitoProcessInstanceProtobuf {
@@ -296,6 +296,28 @@ public final class KogitoProcessInstanceProtobuf {
         com.google.protobuf.ByteString
                 getErrorNodeIdBytes();
 
+        /**
+         * <code>optional string error_node_instance_id = 23;</code>
+         * 
+         * @return Whether the errorNodeInstanceId field is set.
+         */
+        boolean hasErrorNodeInstanceId();
+
+        /**
+         * <code>optional string error_node_instance_id = 23;</code>
+         * 
+         * @return The errorNodeInstanceId.
+         */
+        java.lang.String getErrorNodeInstanceId();
+
+        /**
+         * <code>optional string error_node_instance_id = 23;</code>
+         * 
+         * @return The bytes for errorNodeInstanceId.
+         */
+        com.google.protobuf.ByteString
+                getErrorNodeInstanceIdBytes();
+
         /**
          * <code>optional string error_message = 15;</code>
          * 
@@ -487,6 +509,7 @@ public final class KogitoProcessInstanceProtobuf {
             rootProcessInstanceId_ = "";
             rootProcessId_ = "";
             errorNodeId_ = "";
+            errorNodeInstanceId_ = "";
             errorMessage_ = "";
             referenceId_ = "";
             swimlaneContext_ = java.util.Collections.emptyList();
@@ -1132,6 +1155,59 @@ public final class KogitoProcessInstanceProtobuf {
             }
         }
 
+        public static final int ERROR_NODE_INSTANCE_ID_FIELD_NUMBER = 23;
+        @SuppressWarnings("serial")
+        private volatile java.lang.Object errorNodeInstanceId_ = "";
+
+        /**
+         * <code>optional string error_node_instance_id = 23;</code>
+         * 
+         * @return Whether the errorNodeInstanceId field is set.
+         */
+        @java.lang.Override
+        public boolean hasErrorNodeInstanceId() {
+            return ((bitField0_ & 0x00000200) != 0);
+        }
+
+        /**
+         * <code>optional string error_node_instance_id = 23;</code>
+         * 
+         * @return The errorNodeInstanceId.
+         */
+        @java.lang.Override
+        public java.lang.String getErrorNodeInstanceId() {
+            java.lang.Object ref = errorNodeInstanceId_;
+            if (ref instanceof java.lang.String) {
+                return (java.lang.String) ref;
+            } else {
+                com.google.protobuf.ByteString bs =
+                        (com.google.protobuf.ByteString) ref;
+                java.lang.String s = bs.toStringUtf8();
+                errorNodeInstanceId_ = s;
+                return s;
+            }
+        }
+
+        /**
+         * <code>optional string error_node_instance_id = 23;</code>
+         * 
+         * @return The bytes for errorNodeInstanceId.
+         */
+        @java.lang.Override
+        public com.google.protobuf.ByteString
+                getErrorNodeInstanceIdBytes() {
+            java.lang.Object ref = errorNodeInstanceId_;
+            if (ref instanceof java.lang.String) {
+                com.google.protobuf.ByteString b =
+                        com.google.protobuf.ByteString.copyFromUtf8(
+                                (java.lang.String) ref);
+                errorNodeInstanceId_ = b;
+                return b;
+            } else {
+                return (com.google.protobuf.ByteString) ref;
+            }
+        }
+
         public static final int ERROR_MESSAGE_FIELD_NUMBER = 15;
         @SuppressWarnings("serial")
         private volatile java.lang.Object errorMessage_ = "";
@@ -1143,7 +1219,7 @@ public final class KogitoProcessInstanceProtobuf {
          */
         @java.lang.Override
         public boolean hasErrorMessage() {
-            return ((bitField0_ & 0x00000200) != 0);
+            return ((bitField0_ & 0x00000400) != 0);
         }
 
         /**
@@ -1196,7 +1272,7 @@ public final class KogitoProcessInstanceProtobuf {
          */
         @java.lang.Override
         public boolean hasReferenceId() {
-            return ((bitField0_ & 0x00000400) != 0);
+            return ((bitField0_ & 0x00000800) != 0);
         }
 
         /**
@@ -1248,7 +1324,7 @@ public final class KogitoProcessInstanceProtobuf {
          */
         @java.lang.Override
         public boolean hasSla() {
-            return ((bitField0_ & 0x00000800) != 0);
+            return ((bitField0_ & 0x00001000) != 0);
         }
 
         /**
@@ -1279,7 +1355,7 @@ public final class KogitoProcessInstanceProtobuf {
          */
         @java.lang.Override
         public boolean hasContext() {
-            return ((bitField0_ & 0x00001000) != 0);
+            return ((bitField0_ & 0x00002000) != 0);
         }
 
         /**
@@ -1402,7 +1478,7 @@ public final class KogitoProcessInstanceProtobuf {
          */
         @java.lang.Override
         public boolean hasCancelTimerId() {
-            return ((bitField0_ & 0x00002000) != 0);
+            return ((bitField0_ & 0x00004000) != 0);
         }
 
         /**
@@ -1503,16 +1579,16 @@ public final class KogitoProcessInstanceProtobuf {
             if (((bitField0_ & 0x00000100) != 0)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 14, 
errorNodeId_);
             }
-            if (((bitField0_ & 0x00000200) != 0)) {
+            if (((bitField0_ & 0x00000400) != 0)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 15, 
errorMessage_);
             }
-            if (((bitField0_ & 0x00000400) != 0)) {
+            if (((bitField0_ & 0x00000800) != 0)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 16, 
referenceId_);
             }
-            if (((bitField0_ & 0x00000800) != 0)) {
+            if (((bitField0_ & 0x00001000) != 0)) {
                 output.writeMessage(17, getSla());
             }
-            if (((bitField0_ & 0x00001000) != 0)) {
+            if (((bitField0_ & 0x00002000) != 0)) {
                 output.writeMessage(18, getContext());
             }
             for (int i = 0; i < swimlaneContext_.size(); i++) {
@@ -1521,12 +1597,15 @@ public final class KogitoProcessInstanceProtobuf {
             for (int i = 0; i < completedNodeIds_.size(); i++) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 20, 
completedNodeIds_.getRaw(i));
             }
-            if (((bitField0_ & 0x00002000) != 0)) {
+            if (((bitField0_ & 0x00004000) != 0)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 21, 
cancelTimerId_);
             }
             if 
(!com.google.protobuf.GeneratedMessageV3.isStringEmpty(processVersion_)) {
                 com.google.protobuf.GeneratedMessageV3.writeString(output, 22, 
processVersion_);
             }
+            if (((bitField0_ & 0x00000200) != 0)) {
+                com.google.protobuf.GeneratedMessageV3.writeString(output, 23, 
errorNodeInstanceId_);
+            }
             getUnknownFields().writeTo(output);
         }
 
@@ -1583,17 +1662,17 @@ public final class KogitoProcessInstanceProtobuf {
             if (((bitField0_ & 0x00000100) != 0)) {
                 size += 
com.google.protobuf.GeneratedMessageV3.computeStringSize(14, errorNodeId_);
             }
-            if (((bitField0_ & 0x00000200) != 0)) {
+            if (((bitField0_ & 0x00000400) != 0)) {
                 size += 
com.google.protobuf.GeneratedMessageV3.computeStringSize(15, errorMessage_);
             }
-            if (((bitField0_ & 0x00000400) != 0)) {
+            if (((bitField0_ & 0x00000800) != 0)) {
                 size += 
com.google.protobuf.GeneratedMessageV3.computeStringSize(16, referenceId_);
             }
-            if (((bitField0_ & 0x00000800) != 0)) {
+            if (((bitField0_ & 0x00001000) != 0)) {
                 size += com.google.protobuf.CodedOutputStream
                         .computeMessageSize(17, getSla());
             }
-            if (((bitField0_ & 0x00001000) != 0)) {
+            if (((bitField0_ & 0x00002000) != 0)) {
                 size += com.google.protobuf.CodedOutputStream
                         .computeMessageSize(18, getContext());
             }
@@ -1609,12 +1688,15 @@ public final class KogitoProcessInstanceProtobuf {
                 size += dataSize;
                 size += 2 * getCompletedNodeIdsList().size();
             }
-            if (((bitField0_ & 0x00002000) != 0)) {
+            if (((bitField0_ & 0x00004000) != 0)) {
                 size += 
com.google.protobuf.GeneratedMessageV3.computeStringSize(21, cancelTimerId_);
             }
             if 
(!com.google.protobuf.GeneratedMessageV3.isStringEmpty(processVersion_)) {
                 size += 
com.google.protobuf.GeneratedMessageV3.computeStringSize(22, processVersion_);
             }
+            if (((bitField0_ & 0x00000200) != 0)) {
+                size += 
com.google.protobuf.GeneratedMessageV3.computeStringSize(23, 
errorNodeInstanceId_);
+            }
             size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
@@ -1707,6 +1789,13 @@ public final class KogitoProcessInstanceProtobuf {
                         .equals(other.getErrorNodeId()))
                     return false;
             }
+            if (hasErrorNodeInstanceId() != other.hasErrorNodeInstanceId())
+                return false;
+            if (hasErrorNodeInstanceId()) {
+                if (!getErrorNodeInstanceId()
+                        .equals(other.getErrorNodeInstanceId()))
+                    return false;
+            }
             if (hasErrorMessage() != other.hasErrorMessage())
                 return false;
             if (hasErrorMessage()) {
@@ -1811,6 +1900,10 @@ public final class KogitoProcessInstanceProtobuf {
                 hash = (37 * hash) + ERROR_NODE_ID_FIELD_NUMBER;
                 hash = (53 * hash) + getErrorNodeId().hashCode();
             }
+            if (hasErrorNodeInstanceId()) {
+                hash = (37 * hash) + ERROR_NODE_INSTANCE_ID_FIELD_NUMBER;
+                hash = (53 * hash) + getErrorNodeInstanceId().hashCode();
+            }
             if (hasErrorMessage()) {
                 hash = (37 * hash) + ERROR_MESSAGE_FIELD_NUMBER;
                 hash = (53 * hash) + getErrorMessage().hashCode();
@@ -2011,6 +2104,7 @@ public final class KogitoProcessInstanceProtobuf {
                 rootProcessInstanceId_ = "";
                 rootProcessId_ = "";
                 errorNodeId_ = "";
+                errorNodeInstanceId_ = "";
                 errorMessage_ = "";
                 referenceId_ = "";
                 sla_ = null;
@@ -2029,7 +2123,7 @@ public final class KogitoProcessInstanceProtobuf {
                     swimlaneContext_ = null;
                     swimlaneContextBuilder_.clear();
                 }
-                bitField0_ = (bitField0_ & ~0x00080000);
+                bitField0_ = (bitField0_ & ~0x00100000);
                 completedNodeIds_ =
                         com.google.protobuf.LazyStringArrayList.emptyList();
                 cancelTimerId_ = "";
@@ -2070,9 +2164,9 @@ public final class KogitoProcessInstanceProtobuf {
 
             private void 
buildPartialRepeatedFields(org.jbpm.flow.serialization.protobuf.KogitoProcessInstanceProtobuf.ProcessInstance
 result) {
                 if (swimlaneContextBuilder_ == null) {
-                    if (((bitField0_ & 0x00080000) != 0)) {
+                    if (((bitField0_ & 0x00100000) != 0)) {
                         swimlaneContext_ = 
java.util.Collections.unmodifiableList(swimlaneContext_);
-                        bitField0_ = (bitField0_ & ~0x00080000);
+                        bitField0_ = (bitField0_ & ~0x00100000);
                     }
                     result.swimlaneContext_ = swimlaneContext_;
                 } else {
@@ -2138,32 +2232,36 @@ public final class KogitoProcessInstanceProtobuf {
                     to_bitField0_ |= 0x00000100;
                 }
                 if (((from_bitField0_ & 0x00008000) != 0)) {
-                    result.errorMessage_ = errorMessage_;
+                    result.errorNodeInstanceId_ = errorNodeInstanceId_;
                     to_bitField0_ |= 0x00000200;
                 }
                 if (((from_bitField0_ & 0x00010000) != 0)) {
-                    result.referenceId_ = referenceId_;
+                    result.errorMessage_ = errorMessage_;
                     to_bitField0_ |= 0x00000400;
                 }
                 if (((from_bitField0_ & 0x00020000) != 0)) {
+                    result.referenceId_ = referenceId_;
+                    to_bitField0_ |= 0x00000800;
+                }
+                if (((from_bitField0_ & 0x00040000) != 0)) {
                     result.sla_ = slaBuilder_ == null
                             ? sla_
                             : slaBuilder_.build();
-                    to_bitField0_ |= 0x00000800;
+                    to_bitField0_ |= 0x00001000;
                 }
-                if (((from_bitField0_ & 0x00040000) != 0)) {
+                if (((from_bitField0_ & 0x00080000) != 0)) {
                     result.context_ = contextBuilder_ == null
                             ? context_
                             : contextBuilder_.build();
-                    to_bitField0_ |= 0x00001000;
+                    to_bitField0_ |= 0x00002000;
                 }
-                if (((from_bitField0_ & 0x00100000) != 0)) {
+                if (((from_bitField0_ & 0x00200000) != 0)) {
                     completedNodeIds_.makeImmutable();
                     result.completedNodeIds_ = completedNodeIds_;
                 }
-                if (((from_bitField0_ & 0x00200000) != 0)) {
+                if (((from_bitField0_ & 0x00400000) != 0)) {
                     result.cancelTimerId_ = cancelTimerId_;
-                    to_bitField0_ |= 0x00002000;
+                    to_bitField0_ |= 0x00004000;
                 }
                 result.bitField0_ |= to_bitField0_;
             }
@@ -2286,14 +2384,19 @@ public final class KogitoProcessInstanceProtobuf {
                     bitField0_ |= 0x00004000;
                     onChanged();
                 }
+                if (other.hasErrorNodeInstanceId()) {
+                    errorNodeInstanceId_ = other.errorNodeInstanceId_;
+                    bitField0_ |= 0x00008000;
+                    onChanged();
+                }
                 if (other.hasErrorMessage()) {
                     errorMessage_ = other.errorMessage_;
-                    bitField0_ |= 0x00008000;
+                    bitField0_ |= 0x00010000;
                     onChanged();
                 }
                 if (other.hasReferenceId()) {
                     referenceId_ = other.referenceId_;
-                    bitField0_ |= 0x00010000;
+                    bitField0_ |= 0x00020000;
                     onChanged();
                 }
                 if (other.hasSla()) {
@@ -2306,7 +2409,7 @@ public final class KogitoProcessInstanceProtobuf {
                     if (!other.swimlaneContext_.isEmpty()) {
                         if (swimlaneContext_.isEmpty()) {
                             swimlaneContext_ = other.swimlaneContext_;
-                            bitField0_ = (bitField0_ & ~0x00080000);
+                            bitField0_ = (bitField0_ & ~0x00100000);
                         } else {
                             ensureSwimlaneContextIsMutable();
                             swimlaneContext_.addAll(other.swimlaneContext_);
@@ -2319,7 +2422,7 @@ public final class KogitoProcessInstanceProtobuf {
                             swimlaneContextBuilder_.dispose();
                             swimlaneContextBuilder_ = null;
                             swimlaneContext_ = other.swimlaneContext_;
-                            bitField0_ = (bitField0_ & ~0x00080000);
+                            bitField0_ = (bitField0_ & ~0x00100000);
                             swimlaneContextBuilder_ =
                                     
com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? 
getSwimlaneContextFieldBuilder() : null;
                         } else {
@@ -2330,7 +2433,7 @@ public final class KogitoProcessInstanceProtobuf {
                 if (!other.completedNodeIds_.isEmpty()) {
                     if (completedNodeIds_.isEmpty()) {
                         completedNodeIds_ = other.completedNodeIds_;
-                        bitField0_ |= 0x00100000;
+                        bitField0_ |= 0x00200000;
                     } else {
                         ensureCompletedNodeIdsIsMutable();
                         completedNodeIds_.addAll(other.completedNodeIds_);
@@ -2339,7 +2442,7 @@ public final class KogitoProcessInstanceProtobuf {
                 }
                 if (other.hasCancelTimerId()) {
                     cancelTimerId_ = other.cancelTimerId_;
-                    bitField0_ |= 0x00200000;
+                    bitField0_ |= 0x00400000;
                     onChanged();
                 }
                 this.mergeUnknownFields(other.getUnknownFields());
@@ -2440,26 +2543,26 @@ public final class KogitoProcessInstanceProtobuf {
                             } // case 114
                             case 122: {
                                 errorMessage_ = input.readStringRequireUtf8();
-                                bitField0_ |= 0x00008000;
+                                bitField0_ |= 0x00010000;
                                 break;
                             } // case 122
                             case 130: {
                                 referenceId_ = input.readStringRequireUtf8();
-                                bitField0_ |= 0x00010000;
+                                bitField0_ |= 0x00020000;
                                 break;
                             } // case 130
                             case 138: {
                                 input.readMessage(
                                         getSlaFieldBuilder().getBuilder(),
                                         extensionRegistry);
-                                bitField0_ |= 0x00020000;
+                                bitField0_ |= 0x00040000;
                                 break;
                             } // case 138
                             case 146: {
                                 input.readMessage(
                                         getContextFieldBuilder().getBuilder(),
                                         extensionRegistry);
-                                bitField0_ |= 0x00040000;
+                                bitField0_ |= 0x00080000;
                                 break;
                             } // case 146
                             case 154: {
@@ -2483,7 +2586,7 @@ public final class KogitoProcessInstanceProtobuf {
                             } // case 162
                             case 170: {
                                 cancelTimerId_ = input.readStringRequireUtf8();
-                                bitField0_ |= 0x00200000;
+                                bitField0_ |= 0x00400000;
                                 break;
                             } // case 170
                             case 178: {
@@ -2491,6 +2594,11 @@ public final class KogitoProcessInstanceProtobuf {
                                 bitField0_ |= 0x00000004;
                                 break;
                             } // case 178
+                            case 186: {
+                                errorNodeInstanceId_ = 
input.readStringRequireUtf8();
+                                bitField0_ |= 0x00008000;
+                                break;
+                            } // case 186
                             default: {
                                 if (!super.parseUnknownField(input, 
extensionRegistry, tag)) {
                                     done = true; // was an endgroup tag
@@ -3690,6 +3798,101 @@ public final class KogitoProcessInstanceProtobuf {
                 return this;
             }
 
+            private java.lang.Object errorNodeInstanceId_ = "";
+
+            /**
+             * <code>optional string error_node_instance_id = 23;</code>
+             * 
+             * @return Whether the errorNodeInstanceId field is set.
+             */
+            public boolean hasErrorNodeInstanceId() {
+                return ((bitField0_ & 0x00008000) != 0);
+            }
+
+            /**
+             * <code>optional string error_node_instance_id = 23;</code>
+             * 
+             * @return The errorNodeInstanceId.
+             */
+            public java.lang.String getErrorNodeInstanceId() {
+                java.lang.Object ref = errorNodeInstanceId_;
+                if (!(ref instanceof java.lang.String)) {
+                    com.google.protobuf.ByteString bs =
+                            (com.google.protobuf.ByteString) ref;
+                    java.lang.String s = bs.toStringUtf8();
+                    errorNodeInstanceId_ = s;
+                    return s;
+                } else {
+                    return (java.lang.String) ref;
+                }
+            }
+
+            /**
+             * <code>optional string error_node_instance_id = 23;</code>
+             * 
+             * @return The bytes for errorNodeInstanceId.
+             */
+            public com.google.protobuf.ByteString
+                    getErrorNodeInstanceIdBytes() {
+                java.lang.Object ref = errorNodeInstanceId_;
+                if (ref instanceof String) {
+                    com.google.protobuf.ByteString b =
+                            com.google.protobuf.ByteString.copyFromUtf8(
+                                    (java.lang.String) ref);
+                    errorNodeInstanceId_ = b;
+                    return b;
+                } else {
+                    return (com.google.protobuf.ByteString) ref;
+                }
+            }
+
+            /**
+             * <code>optional string error_node_instance_id = 23;</code>
+             * 
+             * @param value The errorNodeInstanceId to set.
+             * @return This builder for chaining.
+             */
+            public Builder setErrorNodeInstanceId(
+                    java.lang.String value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                errorNodeInstanceId_ = value;
+                bitField0_ |= 0x00008000;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>optional string error_node_instance_id = 23;</code>
+             * 
+             * @return This builder for chaining.
+             */
+            public Builder clearErrorNodeInstanceId() {
+                errorNodeInstanceId_ = 
getDefaultInstance().getErrorNodeInstanceId();
+                bitField0_ = (bitField0_ & ~0x00008000);
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>optional string error_node_instance_id = 23;</code>
+             * 
+             * @param value The bytes for errorNodeInstanceId to set.
+             * @return This builder for chaining.
+             */
+            public Builder setErrorNodeInstanceIdBytes(
+                    com.google.protobuf.ByteString value) {
+                if (value == null) {
+                    throw new NullPointerException();
+                }
+                checkByteStringIsUtf8(value);
+                errorNodeInstanceId_ = value;
+                bitField0_ |= 0x00008000;
+                onChanged();
+                return this;
+            }
+
             private java.lang.Object errorMessage_ = "";
 
             /**
@@ -3698,7 +3901,7 @@ public final class KogitoProcessInstanceProtobuf {
              * @return Whether the errorMessage field is set.
              */
             public boolean hasErrorMessage() {
-                return ((bitField0_ & 0x00008000) != 0);
+                return ((bitField0_ & 0x00010000) != 0);
             }
 
             /**
@@ -3750,7 +3953,7 @@ public final class KogitoProcessInstanceProtobuf {
                     throw new NullPointerException();
                 }
                 errorMessage_ = value;
-                bitField0_ |= 0x00008000;
+                bitField0_ |= 0x00010000;
                 onChanged();
                 return this;
             }
@@ -3762,7 +3965,7 @@ public final class KogitoProcessInstanceProtobuf {
              */
             public Builder clearErrorMessage() {
                 errorMessage_ = getDefaultInstance().getErrorMessage();
-                bitField0_ = (bitField0_ & ~0x00008000);
+                bitField0_ = (bitField0_ & ~0x00010000);
                 onChanged();
                 return this;
             }
@@ -3780,7 +3983,7 @@ public final class KogitoProcessInstanceProtobuf {
                 }
                 checkByteStringIsUtf8(value);
                 errorMessage_ = value;
-                bitField0_ |= 0x00008000;
+                bitField0_ |= 0x00010000;
                 onChanged();
                 return this;
             }
@@ -3793,7 +3996,7 @@ public final class KogitoProcessInstanceProtobuf {
              * @return Whether the referenceId field is set.
              */
             public boolean hasReferenceId() {
-                return ((bitField0_ & 0x00010000) != 0);
+                return ((bitField0_ & 0x00020000) != 0);
             }
 
             /**
@@ -3845,7 +4048,7 @@ public final class KogitoProcessInstanceProtobuf {
                     throw new NullPointerException();
                 }
                 referenceId_ = value;
-                bitField0_ |= 0x00010000;
+                bitField0_ |= 0x00020000;
                 onChanged();
                 return this;
             }
@@ -3857,7 +4060,7 @@ public final class KogitoProcessInstanceProtobuf {
              */
             public Builder clearReferenceId() {
                 referenceId_ = getDefaultInstance().getReferenceId();
-                bitField0_ = (bitField0_ & ~0x00010000);
+                bitField0_ = (bitField0_ & ~0x00020000);
                 onChanged();
                 return this;
             }
@@ -3875,7 +4078,7 @@ public final class KogitoProcessInstanceProtobuf {
                 }
                 checkByteStringIsUtf8(value);
                 referenceId_ = value;
-                bitField0_ |= 0x00010000;
+                bitField0_ |= 0x00020000;
                 onChanged();
                 return this;
             }
@@ -3889,7 +4092,7 @@ public final class KogitoProcessInstanceProtobuf {
              * @return Whether the sla field is set.
              */
             public boolean hasSla() {
-                return ((bitField0_ & 0x00020000) != 0);
+                return ((bitField0_ & 0x00040000) != 0);
             }
 
             /**
@@ -3917,7 +4120,7 @@ public final class KogitoProcessInstanceProtobuf {
                 } else {
                     slaBuilder_.setMessage(value);
                 }
-                bitField0_ |= 0x00020000;
+                bitField0_ |= 0x00040000;
                 onChanged();
                 return this;
             }
@@ -3932,7 +4135,7 @@ public final class KogitoProcessInstanceProtobuf {
                 } else {
                     slaBuilder_.setMessage(builderForValue.build());
                 }
-                bitField0_ |= 0x00020000;
+                bitField0_ |= 0x00040000;
                 onChanged();
                 return this;
             }
@@ -3942,7 +4145,7 @@ public final class KogitoProcessInstanceProtobuf {
              */
             public Builder 
mergeSla(org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.SLAContext 
value) {
                 if (slaBuilder_ == null) {
-                    if (((bitField0_ & 0x00020000) != 0) &&
+                    if (((bitField0_ & 0x00040000) != 0) &&
                             sla_ != null &&
                             sla_ != 
org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.SLAContext.getDefaultInstance())
 {
                         getSlaBuilder().mergeFrom(value);
@@ -3953,7 +4156,7 @@ public final class KogitoProcessInstanceProtobuf {
                     slaBuilder_.mergeFrom(value);
                 }
                 if (sla_ != null) {
-                    bitField0_ |= 0x00020000;
+                    bitField0_ |= 0x00040000;
                     onChanged();
                 }
                 return this;
@@ -3963,7 +4166,7 @@ public final class KogitoProcessInstanceProtobuf {
              * <code>optional .org.jbpm.flow.serialization.protobuf.SLAContext 
sla = 17;</code>
              */
             public Builder clearSla() {
-                bitField0_ = (bitField0_ & ~0x00020000);
+                bitField0_ = (bitField0_ & ~0x00040000);
                 sla_ = null;
                 if (slaBuilder_ != null) {
                     slaBuilder_.dispose();
@@ -3977,7 +4180,7 @@ public final class KogitoProcessInstanceProtobuf {
              * <code>optional .org.jbpm.flow.serialization.protobuf.SLAContext 
sla = 17;</code>
              */
             public 
org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.SLAContext.Builder 
getSlaBuilder() {
-                bitField0_ |= 0x00020000;
+                bitField0_ |= 0x00040000;
                 onChanged();
                 return getSlaFieldBuilder().getBuilder();
             }
@@ -4018,7 +4221,7 @@ public final class KogitoProcessInstanceProtobuf {
              * @return Whether the context field is set.
              */
             public boolean hasContext() {
-                return ((bitField0_ & 0x00040000) != 0);
+                return ((bitField0_ & 0x00080000) != 0);
             }
 
             /**
@@ -4046,7 +4249,7 @@ public final class KogitoProcessInstanceProtobuf {
                 } else {
                     contextBuilder_.setMessage(value);
                 }
-                bitField0_ |= 0x00040000;
+                bitField0_ |= 0x00080000;
                 onChanged();
                 return this;
             }
@@ -4061,7 +4264,7 @@ public final class KogitoProcessInstanceProtobuf {
                 } else {
                     contextBuilder_.setMessage(builderForValue.build());
                 }
-                bitField0_ |= 0x00040000;
+                bitField0_ |= 0x00080000;
                 onChanged();
                 return this;
             }
@@ -4071,7 +4274,7 @@ public final class KogitoProcessInstanceProtobuf {
              */
             public Builder 
mergeContext(org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.WorkflowContext
 value) {
                 if (contextBuilder_ == null) {
-                    if (((bitField0_ & 0x00040000) != 0) &&
+                    if (((bitField0_ & 0x00080000) != 0) &&
                             context_ != null &&
                             context_ != 
org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.WorkflowContext.getDefaultInstance())
 {
                         getContextBuilder().mergeFrom(value);
@@ -4082,7 +4285,7 @@ public final class KogitoProcessInstanceProtobuf {
                     contextBuilder_.mergeFrom(value);
                 }
                 if (context_ != null) {
-                    bitField0_ |= 0x00040000;
+                    bitField0_ |= 0x00080000;
                     onChanged();
                 }
                 return this;
@@ -4092,7 +4295,7 @@ public final class KogitoProcessInstanceProtobuf {
              * <code>optional 
.org.jbpm.flow.serialization.protobuf.WorkflowContext context = 18;</code>
              */
             public Builder clearContext() {
-                bitField0_ = (bitField0_ & ~0x00040000);
+                bitField0_ = (bitField0_ & ~0x00080000);
                 context_ = null;
                 if (contextBuilder_ != null) {
                     contextBuilder_.dispose();
@@ -4106,7 +4309,7 @@ public final class KogitoProcessInstanceProtobuf {
              * <code>optional 
.org.jbpm.flow.serialization.protobuf.WorkflowContext context = 18;</code>
              */
             public 
org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.WorkflowContext.Builder
 getContextBuilder() {
-                bitField0_ |= 0x00040000;
+                bitField0_ |= 0x00080000;
                 onChanged();
                 return getContextFieldBuilder().getBuilder();
             }
@@ -4142,9 +4345,9 @@ public final class KogitoProcessInstanceProtobuf {
                     java.util.Collections.emptyList();
 
             private void ensureSwimlaneContextIsMutable() {
-                if (!((bitField0_ & 0x00080000) != 0)) {
+                if (!((bitField0_ & 0x00100000) != 0)) {
                     swimlaneContext_ = new 
java.util.ArrayList<org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.SwimlaneContext>(swimlaneContext_);
-                    bitField0_ |= 0x00080000;
+                    bitField0_ |= 0x00100000;
                 }
             }
 
@@ -4303,7 +4506,7 @@ public final class KogitoProcessInstanceProtobuf {
             public Builder clearSwimlaneContext() {
                 if (swimlaneContextBuilder_ == null) {
                     swimlaneContext_ = java.util.Collections.emptyList();
-                    bitField0_ = (bitField0_ & ~0x00080000);
+                    bitField0_ = (bitField0_ & ~0x00100000);
                     onChanged();
                 } else {
                     swimlaneContextBuilder_.clear();
@@ -4388,7 +4591,7 @@ public final class KogitoProcessInstanceProtobuf {
                     swimlaneContextBuilder_ =
                             new 
com.google.protobuf.RepeatedFieldBuilderV3<org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.SwimlaneContext,
 
org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.SwimlaneContext.Builder,
 
org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.SwimlaneContextOrBuilder>(
                                     swimlaneContext_,
-                                    ((bitField0_ & 0x00080000) != 0),
+                                    ((bitField0_ & 0x00100000) != 0),
                                     getParentForChildren(),
                                     isClean());
                     swimlaneContext_ = null;
@@ -4403,7 +4606,7 @@ public final class KogitoProcessInstanceProtobuf {
                 if (!completedNodeIds_.isModifiable()) {
                     completedNodeIds_ = new 
com.google.protobuf.LazyStringArrayList(completedNodeIds_);
                 }
-                bitField0_ |= 0x00100000;
+                bitField0_ |= 0x00200000;
             }
 
             /**
@@ -4461,7 +4664,7 @@ public final class KogitoProcessInstanceProtobuf {
                 }
                 ensureCompletedNodeIdsIsMutable();
                 completedNodeIds_.set(index, value);
-                bitField0_ |= 0x00100000;
+                bitField0_ |= 0x00200000;
                 onChanged();
                 return this;
             }
@@ -4479,7 +4682,7 @@ public final class KogitoProcessInstanceProtobuf {
                 }
                 ensureCompletedNodeIdsIsMutable();
                 completedNodeIds_.add(value);
-                bitField0_ |= 0x00100000;
+                bitField0_ |= 0x00200000;
                 onChanged();
                 return this;
             }
@@ -4495,7 +4698,7 @@ public final class KogitoProcessInstanceProtobuf {
                 ensureCompletedNodeIdsIsMutable();
                 com.google.protobuf.AbstractMessageLite.Builder.addAll(
                         values, completedNodeIds_);
-                bitField0_ |= 0x00100000;
+                bitField0_ |= 0x00200000;
                 onChanged();
                 return this;
             }
@@ -4508,7 +4711,7 @@ public final class KogitoProcessInstanceProtobuf {
             public Builder clearCompletedNodeIds() {
                 completedNodeIds_ =
                         com.google.protobuf.LazyStringArrayList.emptyList();
-                bitField0_ = (bitField0_ & ~0x00100000);
+                bitField0_ = (bitField0_ & ~0x00200000);
                 ;
                 onChanged();
                 return this;
@@ -4528,7 +4731,7 @@ public final class KogitoProcessInstanceProtobuf {
                 checkByteStringIsUtf8(value);
                 ensureCompletedNodeIdsIsMutable();
                 completedNodeIds_.add(value);
-                bitField0_ |= 0x00100000;
+                bitField0_ |= 0x00200000;
                 onChanged();
                 return this;
             }
@@ -4541,7 +4744,7 @@ public final class KogitoProcessInstanceProtobuf {
              * @return Whether the cancelTimerId field is set.
              */
             public boolean hasCancelTimerId() {
-                return ((bitField0_ & 0x00200000) != 0);
+                return ((bitField0_ & 0x00400000) != 0);
             }
 
             /**
@@ -4593,7 +4796,7 @@ public final class KogitoProcessInstanceProtobuf {
                     throw new NullPointerException();
                 }
                 cancelTimerId_ = value;
-                bitField0_ |= 0x00200000;
+                bitField0_ |= 0x00400000;
                 onChanged();
                 return this;
             }
@@ -4605,7 +4808,7 @@ public final class KogitoProcessInstanceProtobuf {
              */
             public Builder clearCancelTimerId() {
                 cancelTimerId_ = getDefaultInstance().getCancelTimerId();
-                bitField0_ = (bitField0_ & ~0x00200000);
+                bitField0_ = (bitField0_ & ~0x00400000);
                 onChanged();
                 return this;
             }
@@ -4623,7 +4826,7 @@ public final class KogitoProcessInstanceProtobuf {
                 }
                 checkByteStringIsUtf8(value);
                 cancelTimerId_ = value;
-                bitField0_ |= 0x00200000;
+                bitField0_ |= 0x00400000;
                 onChanged();
                 return this;
             }
@@ -4705,7 +4908,7 @@ public final class KogitoProcessInstanceProtobuf {
                         "ogito_process_instance.proto\022$org.jbpm.f" +
                         "low.serialization.protobuf\0327org/jbpm/flo" +
                         "w/serialization/protobuf/kogito_types.pr" +
-                        
"oto\"\372\007\n\017ProcessInstance\022\024\n\014process_type\030" +
+                        
"oto\"\272\010\n\017ProcessInstance\022\024\n\014process_type\030" +
                         "\001 \001(\t\022\022\n\nprocess_id\030\002 
\001(\t\022\027\n\017process_ver" +
                         "sion\030\026 \001(\t\022\n\n\002id\030\003 
\001(\t\022\'\n\032parent_process" +
                         "_instance_id\030\004 
\001(\tH\000\210\001\001\022\031\n\014business_key\030" +
@@ -4715,23 +4918,25 @@ public final class KogitoProcessInstanceProtobuf {
                         "_counter\030\n 
\001(\003H\005\210\001\001\022\031\n\021signal_completion" +
                         "\030\013 
\001(\010\022%\n\030root_process_instance_id\030\014 \001(\t" +
                         "H\006\210\001\001\022\034\n\017root_process_id\030\r 
\001(\tH\007\210\001\001\022\032\n\re" +
-                        "rror_node_id\030\016 
\001(\tH\010\210\001\001\022\032\n\rerror_message" +
-                        "\030\017 
\001(\tH\t\210\001\001\022\031\n\014reference_id\030\020 
\001(\tH\n\210\001\001\022B" +
-                        "\n\003sla\030\021 
\001(\01320.org.jbpm.flow.serializatio" +
-                        
"n.protobuf.SLAContextH\013\210\001\001\022K\n\007context\030\022 " +
-                        "\001(\01325.org.jbpm.flow.serialization.protob" +
-                        
"uf.WorkflowContextH\014\210\001\001\022O\n\020swimlane_cont" +
-                        "ext\030\023 \003(\01325.org.jbpm.flow.serialization." 
+
-                        "protobuf.SwimlaneContext\022\030\n\020completedNod" +
-                        "eIds\030\024 
\003(\t\022\034\n\017cancel_timer_id\030\025 \001(\tH\r\210\001\001" +
-                        "B\035\n\033_parent_process_instance_idB\017\n\r_busi" 
+
-                        "ness_keyB\017\n\r_deploymentIdB\016\n\014_descriptio" 
+
-                        "nB\r\n\013_start_dateB\030\n\026_node_instance_count" 
+
-                        
"erB\033\n\031_root_process_instance_idB\022\n\020_root" +
-                        
"_process_idB\020\n\016_error_node_idB\020\n\016_error_" +
-                        
"messageB\017\n\r_reference_idB\006\n\004_slaB\n\n\010_con" +
-                        
"textB\022\n\020_cancel_timer_idB\037B\035KogitoProces" +
-                        "sInstanceProtobufb\006proto3"
+                        "rror_node_id\030\016 
\001(\tH\010\210\001\001\022#\n\026error_node_in" +
+                        "stance_id\030\027 
\001(\tH\t\210\001\001\022\032\n\rerror_message\030\017 " +
+                        
"\001(\tH\n\210\001\001\022\031\n\014reference_id\030\020 
\001(\tH\013\210\001\001\022B\n\003s" +
+                        "la\030\021 \001(\01320.org.jbpm.flow.serialization.p" 
+
+                        
"rotobuf.SLAContextH\014\210\001\001\022K\n\007context\030\022 \001(\013" +
+                        "25.org.jbpm.flow.serialization.protobuf." +
+                        
"WorkflowContextH\r\210\001\001\022O\n\020swimlane_context" +
+                        "\030\023 \003(\01325.org.jbpm.flow.serialization.pro" 
+
+                        "tobuf.SwimlaneContext\022\030\n\020completedNodeId" +
+                        "s\030\024 
\003(\t\022\034\n\017cancel_timer_id\030\025 \001(\tH\016\210\001\001B\035\n" +
+                        "\033_parent_process_instance_idB\017\n\r_busines" +
+                        
"s_keyB\017\n\r_deploymentIdB\016\n\014_descriptionB\r" +
+                        "\n\013_start_dateB\030\n\026_node_instance_counterB" +
+                        
"\033\n\031_root_process_instance_idB\022\n\020_root_pr" +
+                        
"ocess_idB\020\n\016_error_node_idB\031\n\027_error_nod" +
+                        "e_instance_idB\020\n\016_error_messageB\017\n\r_refe" 
+
+                        
"rence_idB\006\n\004_slaB\n\n\010_contextB\022\n\020_cancel_" +
+                        "timer_idB\037B\035KogitoProcessInstanceProtobu" +
+                        "fb\006proto3"
         };
         descriptor = com.google.protobuf.Descriptors.FileDescriptor
                 .internalBuildGeneratedFileFrom(descriptorData,
@@ -4743,8 +4948,8 @@ public final class KogitoProcessInstanceProtobuf {
         
internal_static_org_jbpm_flow_serialization_protobuf_ProcessInstance_fieldAccessorTable
 = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 
internal_static_org_jbpm_flow_serialization_protobuf_ProcessInstance_descriptor,
                 new java.lang.String[] { "ProcessType", "ProcessId", 
"ProcessVersion", "Id", "ParentProcessInstanceId", "BusinessKey", 
"DeploymentId", "Description", "State", "StartDate",
-                        "NodeInstanceCounter", "SignalCompletion", 
"RootProcessInstanceId", "RootProcessId", "ErrorNodeId", "ErrorMessage", 
"ReferenceId", "Sla", "Context", "SwimlaneContext",
-                        "CompletedNodeIds", "CancelTimerId", });
+                        "NodeInstanceCounter", "SignalCompletion", 
"RootProcessInstanceId", "RootProcessId", "ErrorNodeId", "ErrorNodeInstanceId", 
"ErrorMessage", "ReferenceId", "Sla", "Context",
+                        "SwimlaneContext", "CompletedNodeIds", 
"CancelTimerId", });
         
org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.getDescriptor();
     }
 
diff --git 
a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoTypesProtobuf.java
 
b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoTypesProtobuf.java
index 51922a02ed..9b9fee6326 100644
--- 
a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoTypesProtobuf.java
+++ 
b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoTypesProtobuf.java
@@ -19,7 +19,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: org/jbpm/flow/serialization/protobuf/kogito_types.proto
 
-// Protobuf Java Version: 3.25.0
+// Protobuf Java Version: 3.25.5
 package org.jbpm.flow.serialization.protobuf;
 
 public final class KogitoTypesProtobuf {
@@ -2355,6 +2355,20 @@ public final class KogitoTypesProtobuf {
          * <code>optional .org.jbpm.flow.serialization.protobuf.SLAContext sla 
= 6;</code>
          */
         
org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.SLAContextOrBuilder 
getSlaOrBuilder();
+
+        /**
+         * <code>optional bool retrigger = 7;</code>
+         * 
+         * @return Whether the retrigger field is set.
+         */
+        boolean hasRetrigger();
+
+        /**
+         * <code>optional bool retrigger = 7;</code>
+         * 
+         * @return The retrigger.
+         */
+        boolean getRetrigger();
     }
 
     /**
@@ -2591,6 +2605,29 @@ public final class KogitoTypesProtobuf {
             return sla_ == null ? 
org.jbpm.flow.serialization.protobuf.KogitoTypesProtobuf.SLAContext.getDefaultInstance()
 : sla_;
         }
 
+        public static final int RETRIGGER_FIELD_NUMBER = 7;
+        private boolean retrigger_ = false;
+
+        /**
+         * <code>optional bool retrigger = 7;</code>
+         * 
+         * @return Whether the retrigger field is set.
+         */
+        @java.lang.Override
+        public boolean hasRetrigger() {
+            return ((bitField0_ & 0x00000010) != 0);
+        }
+
+        /**
+         * <code>optional bool retrigger = 7;</code>
+         * 
+         * @return The retrigger.
+         */
+        @java.lang.Override
+        public boolean getRetrigger() {
+            return retrigger_;
+        }
+
         private byte memoizedIsInitialized = -1;
 
         @java.lang.Override
@@ -2626,6 +2663,9 @@ public final class KogitoTypesProtobuf {
             if (((bitField0_ & 0x00000008) != 0)) {
                 output.writeMessage(6, getSla());
             }
+            if (((bitField0_ & 0x00000010) != 0)) {
+                output.writeBool(7, retrigger_);
+            }
             getUnknownFields().writeTo(output);
         }
 
@@ -2658,6 +2698,10 @@ public final class KogitoTypesProtobuf {
                 size += com.google.protobuf.CodedOutputStream
                         .computeMessageSize(6, getSla());
             }
+            if (((bitField0_ & 0x00000010) != 0)) {
+                size += com.google.protobuf.CodedOutputStream
+                        .computeBoolSize(7, retrigger_);
+            }
             size += getUnknownFields().getSerializedSize();
             memoizedSize = size;
             return size;
@@ -2705,6 +2749,12 @@ public final class KogitoTypesProtobuf {
                         .equals(other.getSla()))
                     return false;
             }
+            if (hasRetrigger() != other.hasRetrigger())
+                return false;
+            if (hasRetrigger()) {
+                if (getRetrigger() != other.getRetrigger())
+                    return false;
+            }
             if (!getUnknownFields().equals(other.getUnknownFields()))
                 return false;
             return true;
@@ -2738,6 +2788,11 @@ public final class KogitoTypesProtobuf {
                 hash = (37 * hash) + SLA_FIELD_NUMBER;
                 hash = (53 * hash) + getSla().hashCode();
             }
+            if (hasRetrigger()) {
+                hash = (37 * hash) + RETRIGGER_FIELD_NUMBER;
+                hash = (53 * hash) + com.google.protobuf.Internal.hashBoolean(
+                        getRetrigger());
+            }
             hash = (29 * hash) + getUnknownFields().hashCode();
             memoizedHashCode = hash;
             return hash;
@@ -2907,6 +2962,7 @@ public final class KogitoTypesProtobuf {
                     slaBuilder_.dispose();
                     slaBuilder_ = null;
                 }
+                retrigger_ = false;
                 return this;
             }
 
@@ -2969,6 +3025,10 @@ public final class KogitoTypesProtobuf {
                             : slaBuilder_.build();
                     to_bitField0_ |= 0x00000008;
                 }
+                if (((from_bitField0_ & 0x00000040) != 0)) {
+                    result.retrigger_ = retrigger_;
+                    to_bitField0_ |= 0x00000010;
+                }
                 result.bitField0_ |= to_bitField0_;
             }
 
@@ -3045,6 +3105,9 @@ public final class KogitoTypesProtobuf {
                 if (other.hasSla()) {
                     mergeSla(other.getSla());
                 }
+                if (other.hasRetrigger()) {
+                    setRetrigger(other.getRetrigger());
+                }
                 this.mergeUnknownFields(other.getUnknownFields());
                 onChanged();
                 return this;
@@ -3105,6 +3168,11 @@ public final class KogitoTypesProtobuf {
                                 bitField0_ |= 0x00000020;
                                 break;
                             } // case 50
+                            case 56: {
+                                retrigger_ = input.readBool();
+                                bitField0_ |= 0x00000040;
+                                break;
+                            } // case 56
                             default: {
                                 if (!super.parseUnknownField(input, 
extensionRegistry, tag)) {
                                     done = true; // was an endgroup tag
@@ -3648,6 +3716,54 @@ public final class KogitoTypesProtobuf {
                 return slaBuilder_;
             }
 
+            private boolean retrigger_;
+
+            /**
+             * <code>optional bool retrigger = 7;</code>
+             * 
+             * @return Whether the retrigger field is set.
+             */
+            @java.lang.Override
+            public boolean hasRetrigger() {
+                return ((bitField0_ & 0x00000040) != 0);
+            }
+
+            /**
+             * <code>optional bool retrigger = 7;</code>
+             * 
+             * @return The retrigger.
+             */
+            @java.lang.Override
+            public boolean getRetrigger() {
+                return retrigger_;
+            }
+
+            /**
+             * <code>optional bool retrigger = 7;</code>
+             * 
+             * @param value The retrigger to set.
+             * @return This builder for chaining.
+             */
+            public Builder setRetrigger(boolean value) {
+
+                retrigger_ = value;
+                bitField0_ |= 0x00000040;
+                onChanged();
+                return this;
+            }
+
+            /**
+             * <code>optional bool retrigger = 7;</code>
+             * 
+             * @return This builder for chaining.
+             */
+            public Builder clearRetrigger() {
+                bitField0_ = (bitField0_ & ~0x00000040);
+                retrigger_ = false;
+                onChanged();
+                return this;
+            }
+
             @java.lang.Override
             public final Builder setUnknownFields(
                     final com.google.protobuf.UnknownFieldSet unknownFields) {
@@ -8965,31 +9081,32 @@ public final class KogitoTypesProtobuf {
                         "to\"\033\n\010JsonNode\022\017\n\007content\030\001 
\001(\t\"\033\n\010Docum" +
                         "ent\022\017\n\007content\030\001 
\001(\t\"_\n\010Variable\022\014\n\004name" +
                         "\030\001 \001(\t\022\021\n\tdata_type\030\002 
\001(\t\022(\n\005value\030\003 \001(\013" +
-                        
"2\024.google.protobuf.AnyH\000\210\001\001B\010\n\006_value\"\350\001" +
+                        
"2\024.google.protobuf.AnyH\000\210\001\001B\010\n\006_value\"\216\002" +
                         "\n\014NodeInstance\022\n\n\002id\030\001 
\001(\t\022\017\n\007node_id\030\002 " +
                         "\001(\t\022%\n\007content\030\003 
\001(\0132\024.google.protobuf.A" +
                         "ny\022\022\n\005level\030\004 
\001(\005H\000\210\001\001\022\031\n\014trigger_date\030\005" +
                         " \001(\003H\001\210\001\001\022B\n\003sla\030\006 
\001(\01320.org.jbpm.flow.s" +
-                        
"erialization.protobuf.SLAContextH\002\210\001\001B\010\n" +
-                        
"\006_levelB\017\n\r_trigger_dateB\006\n\004_sla\"\277\002\n\017Wor" +
-                        "kflowContext\022@\n\010variable\030\001 
\003(\0132..org.jbp" +
-                        "m.flow.serialization.protobuf.Variable\022I" +
-                        "\n\rnode_instance\030\002 
\003(\01322.org.jbpm.flow.se" +
-                        "rialization.protobuf.NodeInstance\022P\n\017exc" +
-                        "lusive_group\030\003 \003(\01327.org.jbpm.flow.seria" 
+
-                        "lization.protobuf.NodeInstanceGroup\022M\n\017i" +
-                        "terationLevels\030\004 \003(\01324.org.jbpm.flow.ser" 
+
-                        "ialization.protobuf.IterationLevel\"Y\n\017Sw" +
-                        "imlaneContext\022\025\n\010swimlane\030\001 
\001(\tH\000\210\001\001\022\025\n\010" +
-                        "actor_id\030\002 
\001(\tH\001\210\001\001B\013\n\t_swimlaneB\013\n\t_act" +
-                        
"or_id\"\224\001\n\nSLAContext\022\031\n\014sla_timer_id\030\001 \001" +
-                        
"(\tH\000\210\001\001\022\031\n\014sla_due_date\030\002 
\001(\003H\001\210\001\001\022\033\n\016sl" +
-                        "a_compliance\030\003 
\001(\005H\002\210\001\001B\017\n\r_sla_timer_id" +
-                        
"B\017\n\r_sla_due_dateB\021\n\017_sla_compliance\"F\n\016" +
-                        "IterationLevel\022\017\n\002id\030\001 
\001(\tH\000\210\001\001\022\022\n\005level" +
-                        "\030\002 
\001(\005H\001\210\001\001B\005\n\003_idB\010\n\006_level\"3\n\021NodeInst" +
-                        "anceGroup\022\036\n\026group_node_instance_id\030\001 
\003(" +
-                        "\tB\025B\023KogitoTypesProtobufb\006proto3"
+                        
"erialization.protobuf.SLAContextH\002\210\001\001\022\026\n" +
+                        "\tretrigger\030\007 
\001(\010H\003\210\001\001B\010\n\006_levelB\017\n\r_trig" +
+                        
"ger_dateB\006\n\004_slaB\014\n\n_retrigger\"\277\002\n\017Workf" +
+                        "lowContext\022@\n\010variable\030\001 
\003(\0132..org.jbpm." +
+                        "flow.serialization.protobuf.Variable\022I\n\r" +
+                        "node_instance\030\002 \003(\01322.org.jbpm.flow.seri" 
+
+                        "alization.protobuf.NodeInstance\022P\n\017exclu" +
+                        "sive_group\030\003 \003(\01327.org.jbpm.flow.seriali" 
+
+                        "zation.protobuf.NodeInstanceGroup\022M\n\017ite" +
+                        "rationLevels\030\004 \003(\01324.org.jbpm.flow.seria" 
+
+                        "lization.protobuf.IterationLevel\"Y\n\017Swim" +
+                        "laneContext\022\025\n\010swimlane\030\001 
\001(\tH\000\210\001\001\022\025\n\010ac" +
+                        "tor_id\030\002 
\001(\tH\001\210\001\001B\013\n\t_swimlaneB\013\n\t_actor" +
+                        
"_id\"\224\001\n\nSLAContext\022\031\n\014sla_timer_id\030\001 \001(\t" +
+                        "H\000\210\001\001\022\031\n\014sla_due_date\030\002 
\001(\003H\001\210\001\001\022\033\n\016sla_" +
+                        "compliance\030\003 
\001(\005H\002\210\001\001B\017\n\r_sla_timer_idB\017" +
+                        
"\n\r_sla_due_dateB\021\n\017_sla_compliance\"F\n\016It" +
+                        "erationLevel\022\017\n\002id\030\001 
\001(\tH\000\210\001\001\022\022\n\005level\030\002" +
+                        " 
\001(\005H\001\210\001\001B\005\n\003_idB\010\n\006_level\"3\n\021NodeInstan" +
+                        "ceGroup\022\036\n\026group_node_instance_id\030\001 
\003(\tB" +
+                        "\025B\023KogitoTypesProtobufb\006proto3"
         };
         descriptor = com.google.protobuf.Descriptors.FileDescriptor
                 .internalBuildGeneratedFileFrom(descriptorData,
@@ -9015,7 +9132,7 @@ public final class KogitoTypesProtobuf {
                 getDescriptor().getMessageTypes().get(3);
         
internal_static_org_jbpm_flow_serialization_protobuf_NodeInstance_fieldAccessorTable
 = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
                 
internal_static_org_jbpm_flow_serialization_protobuf_NodeInstance_descriptor,
-                new java.lang.String[] { "Id", "NodeId", "Content", "Level", 
"TriggerDate", "Sla", });
+                new java.lang.String[] { "Id", "NodeId", "Content", "Level", 
"TriggerDate", "Sla", "Retrigger", });
         
internal_static_org_jbpm_flow_serialization_protobuf_WorkflowContext_descriptor 
=
                 getDescriptor().getMessageTypes().get(4);
         
internal_static_org_jbpm_flow_serialization_protobuf_WorkflowContext_fieldAccessorTable
 = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable(
diff --git 
a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoWorkItemsProtobuf.java
 
b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoWorkItemsProtobuf.java
index a48b5b9306..878e4fcd34 100644
--- 
a/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoWorkItemsProtobuf.java
+++ 
b/jbpm/process-serialization-protobuf/src/main/java/org/jbpm/flow/serialization/protobuf/KogitoWorkItemsProtobuf.java
@@ -19,7 +19,7 @@
 // Generated by the protocol buffer compiler.  DO NOT EDIT!
 // source: org/jbpm/flow/serialization/protobuf/kogito_work_items.proto
 
-// Protobuf Java Version: 3.25.0
+// Protobuf Java Version: 3.25.5
 package org.jbpm.flow.serialization.protobuf;
 
 public final class KogitoWorkItemsProtobuf {
diff --git 
a/jbpm/process-serialization-protobuf/src/main/resources/org/jbpm/flow/serialization/protobuf/kogito_process_instance.proto
 
b/jbpm/process-serialization-protobuf/src/main/resources/org/jbpm/flow/serialization/protobuf/kogito_process_instance.proto
index f6a8f1d7d5..8ca359d98b 100644
--- 
a/jbpm/process-serialization-protobuf/src/main/resources/org/jbpm/flow/serialization/protobuf/kogito_process_instance.proto
+++ 
b/jbpm/process-serialization-protobuf/src/main/resources/org/jbpm/flow/serialization/protobuf/kogito_process_instance.proto
@@ -47,6 +47,7 @@ message ProcessInstance {
     optional string root_process_id = 13;
 
     optional string error_node_id = 14;
+    optional string error_node_instance_id=23;
     optional string error_message = 15;
 
     optional string reference_id = 16;
diff --git 
a/jbpm/process-serialization-protobuf/src/main/resources/org/jbpm/flow/serialization/protobuf/kogito_types.proto
 
b/jbpm/process-serialization-protobuf/src/main/resources/org/jbpm/flow/serialization/protobuf/kogito_types.proto
index 2bde059971..caafd2aa66 100644
--- 
a/jbpm/process-serialization-protobuf/src/main/resources/org/jbpm/flow/serialization/protobuf/kogito_types.proto
+++ 
b/jbpm/process-serialization-protobuf/src/main/resources/org/jbpm/flow/serialization/protobuf/kogito_types.proto
@@ -48,6 +48,7 @@ message NodeInstance {
     optional int64 trigger_date = 5;
 
     optional SLAContext sla = 6;
+    optional bool retrigger= 7;
 }
 
 message WorkflowContext {
diff --git 
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests/PublishEventIT.java
 
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests/PublishEventIT.java
index 5284672e0a..956323277a 100644
--- 
a/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests/PublishEventIT.java
+++ 
b/kogito-codegen-modules/kogito-codegen-processes-integration-tests/src/test/java/org/kie/kogito/codegen/tests/PublishEventIT.java
@@ -497,15 +497,20 @@ public class PublishEventIT extends AbstractCodegenIT {
 
         uow = app.unitOfWorkManager().newUnitOfWork();
         uow.start();
+        int stateEventCount;
         if (processInstance.error().isPresent()) {
+            stateEventCount = 2;
             ((ProcessError) processInstance.error().get()).retrigger();
+        } else {
+            stateEventCount = 1;
         }
+
         uow.end();
 
         events = 
publisher.extract().stream().filter(ProcessInstanceStateDataEvent.class::isInstance).collect(Collectors.toList());
-        assertThat(events).hasSize(1);
+        assertThat(events).hasSize(stateEventCount);
 
-        assertProcessInstanceEvent(events.get(0), 
"ServiceProcessDifferentOperations", "Service Process", 2);
+        assertProcessInstanceEvent(events.get(stateEventCount - 1), 
"ServiceProcessDifferentOperations", "Service Process", 2);
 
         
assertThat(processInstance.status()).isEqualTo(ProcessInstance.STATE_COMPLETED);
         Model result = (Model) processInstance.variables();


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to