Skip to content

Process Execution Conformance — Scope

Process Execution Conformance is BPMN 2.0.2 §2.3, and it has two requirements, addressed to "the tool":

  • §2.3.1 Execution Semantics — the tool "MUST fully support and interpret the operational semantics and Activity life-cycle"; non-operational elements "MAY be ignored".
  • §2.3.2 Import of Process Diagrams — the tool "MUST support import of BPMN Process diagram types including its definitional Collaboration".

A library is not a tool. gobpm ships as an embeddable library and, built on it, the gobpm-server product (SAD-001 §2, §14). §2.3.1 is the library's target and the subject of this document. §2.3.2 belongs to the server, through the converter — so the import-side element coverage is tracked with that work, not here.

This list enumerates §13's operational elements plus the supporting classes they need. Clause 13 animates process instantiation and termination (§13.2), activities (§13.3, including Sub-Process, Call Activity, Ad-Hoc, Loop and Multi-Instance), all five gateways (§13.4) and every event position (§13.5, including boundary, event sub-process and compensation). The remaining entries fall into two further tiers, and the element-coverage suite proves each differently:

Tier What it is How coverage is proven
Operational animated by Clause 13 — activities, gateways, events, flows, containers, markers a suite-owned scenario executes it
Supporting consumed by Clause 13 to express the above — data, foundation, correlation, operations, human interaction a guard-checked binding to the tests that exercise it
Model-only carried but never executed — Lane/LaneSet the type exists and survives a round-trip; execution must ignore it

The first distinction is the standard's own (§13 animates, §8/§10 supply). The third exists because "non-operational" governs execution, not representation: §2.3.1 permits ignoring such elements at run time, while §2.3.2 and ADR-024 §2.8 require the model to hold them.

Correction (2026-08-02). Earlier revisions of this document cited "§2.1.2" for Process Execution Conformance and derived the element set from the Common Executable Subclass ("§2.1.3"). Neither clause exists — §2.1 is General, §2.2 is Process Modeling Conformance — and Common Executable is a sub-class of Modeling conformance (§2.2.1) for tools that emit executable models, mandating XML Schema, WSDL and XPath, none of which this engine uses. The mis-citation is traceable to §2.1's own cross-reference paragraph, which is off by one against the spec's headings. Consequence: ComplexGateway is no longer an "extension" — §13.4.5 gives it complete operational semantics, so §2.3.1 always required it. Its workflow-pattern value (Structured Discriminator WCP-9, Blocking Discriminator WCP-28, Structured Partial Join WCP-30, Blocking Partial Join WCP-31) is a reason it is useful, not a reason it is optional.

In scope

Process container

Element bpmn-moddle type Notes
Process Process Top-level executable process (isExecutable=true)
SubProcess SubProcess Embedded sub-process; also Event Sub-Process when triggeredByEvent=true
Transaction Transaction Sub-process with ACID-like semantics, cancel/compensation triggers
AdHocSubProcess AdHocSubProcess Unordered activity set with completion condition
CallActivity CallActivity Invokes a reusable CallableElement
Lane / LaneSet Lane, LaneSet Model-only — carried, never executed. §2.3.1 lets execution ignore it (no token semantics); §2.3.2 obliges an importer to preserve it, and a model that cannot hold it cannot export it back (ADR-024 §2.8 semantic round-trip).

Activities

Element bpmn-moddle type Notes
Task (abstract) Task Base for typed tasks
ServiceTask ServiceTask Operation invocation
UserTask UserTask Human task with form
ManualTask ManualTask Out-of-system task, no engine action
ScriptTask ScriptTask Inline script execution
BusinessRuleTask BusinessRuleTask DMN / rule engine call
SendTask SendTask Message throw
ReceiveTask ReceiveTask Message catch

Markers (on activities)

Element bpmn-moddle type Notes
StandardLoopCharacteristics StandardLoopCharacteristics Sequential loop with test condition
MultiInstanceLoopCharacteristics MultiInstanceLoopCharacteristics Sequential or parallel MI with cardinality / collection
ComplexBehaviorDefinition ComplexBehaviorDefinition Custom MI completion / event handling

Events

Element bpmn-moddle type Position
StartEvent StartEvent Process start, top-level or event-sub-process
IntermediateCatchEvent IntermediateCatchEvent Inline wait
IntermediateThrowEvent IntermediateThrowEvent Inline emit
EndEvent EndEvent Process / sub-process termination
BoundaryEvent BoundaryEvent Attached to activity (interrupting + non-interrupting via cancelActivity)
ImplicitThrowEvent ImplicitThrowEvent Implicit throw at process end (rarely used directly)

Event definitions (subtypes)

Element bpmn-moddle type Applies to
MessageEventDefinition MessageEventDefinition Start, IntermediateCatch, IntermediateThrow, End, Boundary
TimerEventDefinition TimerEventDefinition Start, IntermediateCatch, Boundary
SignalEventDefinition SignalEventDefinition Start, IntermediateCatch, IntermediateThrow, End, Boundary
ErrorEventDefinition ErrorEventDefinition Start (event sub-process only), End, Boundary
EscalationEventDefinition EscalationEventDefinition Start (event sub-process), IntermediateThrow, End, Boundary
CompensateEventDefinition CompensateEventDefinition Start (event sub-process), IntermediateThrow, End, Boundary
CancelEventDefinition CancelEventDefinition End, Boundary — Transaction sub-process only
ConditionalEventDefinition ConditionalEventDefinition Start, IntermediateCatch, Boundary
LinkEventDefinition LinkEventDefinition IntermediateCatch (target), IntermediateThrow (source)
TerminateEventDefinition TerminateEventDefinition End — terminates entire process instance
Message, Signal, Error, Escalation (referenced item definitions) Resolved by event definitions

Gateways

Element bpmn-moddle type Notes
ExclusiveGateway ExclusiveGateway XOR — first true condition wins
ParallelGateway ParallelGateway AND — all paths split / all paths sync
InclusiveGateway InclusiveGateway OR — all true conditions; merge waits for all expected tokens
EventBasedGateway EventBasedGateway Race between catching events
ComplexGateway ComplexGateway Activation expression over per-gate token counts, 2-phase activation/reset. Operational per §13.4.5, therefore required by §2.3.1 — not an extension (see the correction note above).

Flows

Element bpmn-moddle type Notes
SequenceFlow SequenceFlow Conditional (conditionExpression), default (referenced by default on source)
Association Association Compensation associations (sources to compensation handlers)

Data

Element bpmn-moddle type Notes
ItemDefinition ItemDefinition Type descriptor for data items
DataObject DataObject Process-scoped data
DataObjectReference DataObjectReference Reference to a DataObject within flow scope
DataStore DataStore External persistent data
DataStoreReference DataStoreReference Reference to a DataStore
Property Property Process / activity local variable
DataInput / DataOutput DataInput, DataOutput Activity I/O variables; a throw event's inputs and a catch event's outputs (§10.4.2); the process's declared contract (ADR-040)
DataInputAssociation DataInputAssociation Data flow into an activity or a throw event; a process output into an End event
DataOutputAssociation DataOutputAssociation Data flow out of an activity or a catch event; a Start event into a process input
InputSet / OutputSet InputSet, OutputSet I/O grouping with optional / while-executing semantics
InputOutputSpecification InputOutputSpecification Activity I/O contract
InputOutputBinding InputOutputBinding Binds one InputSet + one OutputSet to an Operation. Realized implicitly, with no named type — gobpm declares a single InputSet and a single OutputSet (SAD-001 §14.1), so there is no pair to select and the binding is the Operation contract itself (BindInputOnly in, Execute out). Absence of the type is a consequence of that deviation, not a gap.
Assignment Assignment Single from/to expression pair within a DataAssociation
DataState DataState Optional state qualifier on data
DataAssociation DataAssociation Abstract base for In/Out associations
ItemAwareElement ItemAwareElement Base for all data-carrying elements

Human interaction (UserTask support)

Element bpmn-moddle type Notes
HumanPerformer HumanPerformer Specialized Performer
PotentialOwner PotentialOwner Candidate owner expression
Performer Performer Generic performer
Rendering Rendering UI hint
Resource Resource Resource definition
ResourceRole ResourceRole Role assignment
ResourceParameter ResourceParameter Resource query parameter
ResourceParameterBinding ResourceParameterBinding Binds value to ResourceParameter
ResourceAssignmentExpression ResourceAssignmentExpression Expression resolving to resource(s)

Correlation (Message events)

Element bpmn-moddle type Notes
CorrelationKey CorrelationKey Named set of correlation properties
CorrelationProperty CorrelationProperty Property used to match messages to process instance
CorrelationPropertyRetrievalExpression CorrelationPropertyRetrievalExpression Extracts property value from a message
CorrelationPropertyBinding CorrelationPropertyBinding Binds property to subscription
CorrelationSubscription CorrelationSubscription Process-level subscription to a correlation key

Operations / Interfaces (Service/Send/Receive tasks)

Element bpmn-moddle type Notes
Interface Interface Operation grouping
Operation Operation Service operation with in/out message
EndPoint EndPoint Operation endpoint reference
GlobalTask / GlobalManualTask / GlobalUserTask / GlobalScriptTask / GlobalBusinessRuleTask GlobalTask, ... Reusable task definitions invocable via CallActivity. In scope. A GlobalTask is reuse by reference, which needs a registry of callable definitions — and the process registry is one: a global task is a callable process whose body is that one task, registered under its id and called like any other (ADR-023 §2.7). The importer builds that process; nothing on the call path distinguishes it from a called process, which is what §13.3.4 says a call is. The library also covers the same need by construction for code-built models — a Go constructor returning a configured task is a reusable definition, and a parameterizable one (task reuse).

Foundation / base types

Element bpmn-moddle type Notes
Definitions Definitions Top-level container of all root elements
BaseElement BaseElement Root of all BPMN elements (id, documentation, extensions)
RootElement RootElement Marker for top-level-only elements
FlowElement FlowElement Anything that appears in a process flow
FlowNode FlowNode Connectable element (activities, events, gateways)
FlowElementsContainer FlowElementsContainer Holds flowElements + laneSets (Process, SubProcess)
CallableElement CallableElement Invocable thing (Process, GlobalTask) — has I/O specification
Expression / FormalExpression Expression, FormalExpression Conditions, assignments, completion criteria
Documentation Documentation Human-readable annotation
Extension / ExtensionDefinition / ExtensionAttributeDefinition / ExtensionElements (as named) Vendor extension mechanism
Import Import External type/schema reference
Auditing / Monitoring Auditing, Monitoring Process-level audit/monitor placeholders

Out of scope

Element / family bpmn-moddle types Reason
Choreography family Choreography, SubChoreography, CallChoreography, ChoreographyTask, ChoreographyActivity, GlobalChoreographyTask Separate Choreography Modeling Conformance subclass
Conversation family Conversation, SubConversation, CallConversation, GlobalConversation, ConversationNode, ConversationLink, ConversationAssociation Modeling-only, not execution
Collaboration family Collaboration, Participant, ParticipantAssociation, ParticipantMultiplicity, PartnerEntity, PartnerRole, InteractionNode, MessageFlow, MessageFlowAssociation Not animated by Clause 13; inter-process messaging is covered by Message events. Note §2.3.2 names the "definitional Collaboration" for import — that is a server/converter concern, not a library one
Category machinery Category, CategoryValue Definitions-level taxonomy roots — consumed at load as the resolution input a Group embeds its value from (ADR-039); not carried as model elements
Cross-namespace Relationship Not execution-related
DI / DC BPMNShape, BPMNEdge, Bounds, Point, all bpmndi:* and dc:*, di:* Visual layout metamodel; not part of execution conformance
BPEL mapping (no bpmn-moddle types) Separate conformance subclass

Boundary cases noted

  • Lane / LaneSetin scope, model-only. "Non-operational" governs execution, not representation: §2.3.1 lets a conformant tool ignore lanes at run time (they carry no token semantics — activities in lanes execute exactly as if no lanes existed), but the model must still hold them. Two independent reasons: §2.3.2 obliges an importer to support Process diagrams, and dropping a modeller's lanes is not supporting them; and ADR-024 §2.8 guarantees a semantic round-trip, which export cannot deliver for a structure the model never stored. So: engine MUST parse and preserve, MUST NOT attach behaviour — the rule this document always stated, now with its clause grounding. The model holds them: pkg/model/lanes carries Lane and LaneSet, and a Process holds its lane sets. What remains is the import, which is a converter task rather than a model gap.
  • Boundary events on CallActivity — explicitly allowed by §10.5.4. In scope.
  • Event Sub-Process — modeled as SubProcess with triggeredByEvent=true. In scope.
  • Compensation AssociationAssociation between an activity and its compensation handler. The element is visual elsewhere; here it carries normative semantics.
  • Artifacts (§8.4.1) — in scope, model-only (ADR-039). The standard's three — Association (plain shape), TextAnnotation, Group — follow the Lane reading: §2.3.1 lets execution ignore them, and the model carries them for §2.3.2 loading and the converters' semantic round-trip. pkg/model/artifacts holds the three kinds behind a closed Artifact interface; Process and SubProcess carry the collection; no execution path reads one. The compensation shape of Association stays what the row above says — the boundary's handler wiring, never duplicated as an artifact. Category/CategoryValue remain un-carried: load-time resolution input only (the out-of-scope table's row).

Spec section index (for cross-reference)

The chapter-10 rows below once read Activities §10.5, Events §10.4, Data §10.3 — a transposition that contradicted every detail file in this extract, and the boundary-event note above ("explicitly allowed by §10.5.4"). It had propagated into nine wrong § pins in the converter's modeler-facing refusals before it was caught. The order is Activities, Data, Events, Gateways.

Topic Spec section
Conformance subclasses §2
Process Execution Conformance (§2.3.1 semantics, §2.3.2 import) §2.3
Process Modeling Conformance sub-classes (Descriptive / Analytic / Common Executable) — not this engine's target §2.2.1
Process model §10
Activities §10.3
Data (Items and Data) §10.4
Events §10.5
Gateways §10.6
Execution semantics (state machines, token flow) §13
Correlation §8.4.2