E Conformance with Camunda 8

What tok expresses of the BPMN, DMN and FEEL that Camunda 8 executes, the conformance case that fixes each translation, and the case of the executable conformance run that deploys it to Camunda 8 Run and drives it to its end. The same kind of table for every element of the BPMN 2.0.2 and DMN 1.5 metamodels, with the results of the round trip of the BPMN Model Interchange Working Group models and of the DMN Technology Compatibility Kit, is docs/conformance-bpmn.md.

This table lists every element of BPMN, DMN and FEEL that Camunda 8.10 lists as supported in its published coverage (the BPMN coverage and DMN coverage pages of the Camunda 8 documentation), with the construct of tok that expresses it, the conformance case whose expected BPMN or DMN export fixes the translation (conformance/cases, compared byte for byte by every implementation, spec §15), and the case of the executable conformance run that deploys it to Camunda 8 Run and drives an instance to its expected end (conformance/camunda/run.py, below). Elements Camunda does not execute are listed at the end, with the codes tok check reports for them in executable documents.

Executable means: the header or a pool has the flag executable, and target= is camunda (the default). Without it, every element below is still modelled and exported, but the attributes of the executable layer are ignored (R055).



The run on Camunda 8 Run 8.10.7: the executable cases of conformance/camunda (documents of language 0.3, exported by the Python implementation of that language; the constructs are those of conformance cases 19–30, whose expected BPMN both the Python implementation and the engine produce) the process of case 63, a document of language 1.0 exported by the native tok program, and the decisions of cases 61 and 63 (exported by the native program, evaluated by Camunda and compared with tok eval and the expected values):

Case Result
multi-instance, adhoc, call-activity, mappings, user-task, message-job, compensation, errors, conditional, listeners, connector, version-tag passed: deployed, started and run to completion, with the user tasks, jobs, messages, errors, variables and headers each case checks
63-executable-10 (language 1.0: the process with its forms and decisions deployed together) passed: a script in FEEL of conformance level 3 (sum(for d in dni return d * 0.5)), the condition of an exclusive gateway, a job with its retries, header and variables, a user task with its assignee and priority, the expected end event, the version tag 1.0 of the process definition
61-executable-decisions (9 evaluations of 6 decisions) passed: deployed, evaluated by Camunda, equal to tok eval and to the expected values
63-executable-10, decisions (3 evaluations of 2 decisions, one input named with two words) passed, as for case 61

All 15 runs passed (PYTHONPATH=python/src python conformance/camunda/run.py, with TOK set to the native program of release 1.0.0), on a fresh data folder of Camunda 8 Run; the process cases ran first and the decision cases last. The run evaluates the decisions last, for a reason that lies in Camunda 8 Run 8.10.7, not in the models: after decisions have been evaluated through the REST API, the exporter to its local secondary storage (H2) can stop on a primary key violation of a decision instance, and from then on searches no longer see new instances, so process cases run afterwards end with a timeout. When that happens, the cases pass again after Camunda 8 Run is stopped and its folders camunda-data and camunda-zeebe-8.10.7/data are emptied.



Camunda 8.10 tok Conformance case Camunda run
pool (participant) and lane pool ID "Label" executable, lane (spec §5.5) 09, 13 every case is a process; pools: 13 (export only)
embedded sub-process sub (§5.3) 08 export only
call activity call … process=ID with binding=, version=, child-vars=, parent-vars=, business-id= (§10.3) 21 call-activity
event sub-process (interrupting and not) eventsub with a triggered start event, noninterrupting (§5.3) 08, 27, 28 export only
ad-hoc sub-process adhoc … active= until= wait (§5.3, §10.3) 20 adhoc
service task service … type= retries= headers= (§10.3) 13, 24 mappings, compensation, errors
user task (Camunda user task, form, assignment, schedule, priority) user … form= assignee= candidate-users= candidate-groups= due= follow-up= priority= (§10.1, §10.3) 12, 13, 23 user-task, multi-instance, listeners
receive task receive … message= correlation= 09, 41 export only
send task send … message= type= 24 export only
business rule task (called decision) rule … decision= result= binding= version= 13, 57 decisions: cases 61 and 63 (the decisions themselves)
script task (FEEL script) script … expr= result= 13, 63 adhoc, call-activity, multi-instance, listeners, 63-executable-10 (FEEL of level 3)
manual task, undefined task manual, task 02 export only
REST outbound connector service … connector=rest method= url= result= (§10.3) 25 connector
exclusive gateway with conditions and default xor, flow … when= / default (§6.1, §10.1) 03, 13 multi-instance, errors
parallel gateway and 04 export only
inclusive gateway or 05 export only
event-based gateway eventgw 06 export only
parallel and sequential multi-instance (collection, element, output, completion) parallel / sequential with collection= item= output= output-item= until= (§10.3) 19 multi-instance
compensation (handler, boundary, throw and end events) compensate=HANDLER, compensation, throw … compensate [activity=], end … compensate (§10.3) 26 compensation
input and output mappings inputs= outputs= (§10.3) 22 mappings, errors
execution and task listeners listeners= (§10.3) 29 listeners
version tag version-tag= on the header or a pool (§10.3) 30 version-tag
data objects, data stores (modelling) data, store, reads, writes (§7) 10 export only
text annotation, group note, group (§8) 10, 44 export only
none start, intermediate throw and end events start, throw, end without a trigger 02 every case
message start, intermediate catch and throw, boundary, end events; correlation message="M", correlation= (§5.1, §10.1); a message throw or end event is a job (type=, C022) 13, 24 message-job (throw and end)
timer start, intermediate, boundary, event sub-process start (duration, date, cycle, expression) timer= (§5.1, §10.3) 07, 13 export only
error end, boundary (with code, catch-all), event sub-process start; error variables error="E" code=, the flag error (§5.1, §10.3) 07, 27 errors
signal start, intermediate catch and throw, boundary, end, event sub-process start signal="S" 07 export only
conditional start (event sub-process), intermediate catch, boundary; variable filters condition=, events= (§10.3) 28 conditional
escalation intermediate throw, end, boundary (with code, catch-all), event sub-process start escalation="X" code=, the flag escalation 07, 27 export only
terminate end event end … terminate 06, 08 export only
link intermediate catch and throw events link="L" 06 export only
forms (Camunda Forms) form with text and field (§10.2), exported as ID.form 12, 63 63-executable-10 deploys its start form and the form of its user task with the process



Camunda 8.10 tok (language 0.7) Conformance case Camunda run
decision requirements graph (decisions, input data, knowledge sources, requirements) decision, inputdata, source, requires= (§9.1) 53, 61 case 61
decision table with every hit policy (unique, first, any, priority, collect with sum, count, min, max, rule order, output order), input and output values, default output table rows, hit=, aggregation=, name: type = values, default= (§9.3) 11, 55, 61 case 61 (limit: first)
literal expression expr= (§9.2) 53, 61 case 61 (blokada)
business knowledge model with a literal expression; invocation from FEEL bkm … params= expr=, a call in FEEL (§9.1) 53, 61 case 61 (naleznosc)
boxed context entry, result lines (§9.2) 54, 61 case 61 (podsumowanie)
boxed list element lines 54, 61 case 61 (kanaly)
relation table rows without \|\| 54 export only
boxed invocation (of a business knowledge model) invoke= with= 54 export only
function definition with a literal body params= on a line 54 export only
item definitions (types, allowed values, components, collections) item … type= allowed= collection with components (§9.4) 54, 61 case 61 (do-naprawy: a list of contexts)
names with spaces and symbols name="…"; in an executable document the FEEL names are written in backticks (§9.5) 61 case 61 (Zaległe opłaty, opłata dzienna)
DMN 1.5 files with DMNDI tok export: one NAME.dmn per graph (§9.5) 53–61 (expected/*.dmn) case 61 deploys the files



Camunda 8 evaluates FEEL (the FEEL engine of Camunda, DMN 1.4 FEEL with extensions) in BPMN expressions and in decisions.

Camunda 8.10 tok Conformance case Camunda run
expressions in conditions, mappings, scripts, multi-instance, ad-hoc, timers, assignments, listeners FEEL without the leading = in the expression attributes; static-or-expression attributes take = (§10.3) 13, 19–29 conditional, mappings, multi-instance, adhoc, user-task
unary tests in decision tables table cells (§9, §9.3) 11, 55 case 61
FEEL of DMN 1.5 conformance level 3 (temporal values, contexts, lists, filters, iteration, quantifiers, ranges, functions, the standard library) every expression of a 0.7 document (§12, feel.md §9) 56 case 61 evaluates contexts, filters and lists; the rest is checked by the DMN TCK (dmn-tck.md) against the expected values of the TCK, not on Camunda



BPMN 2.0.2 element tok Code in executable documents Case
transaction, cancel events transaction, cancel C100, C101 33, 42
complex gateway complex C102 34, 42
standard loop with condition, test or maximum loop while= test-before loop-max= C103 35, 42
multiple and parallel multiple events several triggers, parallel C104, C105 36, 42
instantiating receive task, instantiating event-based gateway instantiate C106, C107 37, 42
call activity of a global task call … task= C108 40, 42
operations, correlation keys (ignored) operation=, key C109, C110 (warnings) 40, 41, 42
conversations, call conversations (ignored), choreographies, participant multiplicity (ignored) conversation, callconversation, choreography, min=/max= C120–C123 47–51
business knowledge model whose logic is an invocation; function definition with a body that is not a literal expression; decision without logic bkm … invoke=, params= on a boxed line, a decision without logic C130–C132 57



  • The Camunda run executes 13 BPMN cases and 12 decision evaluations. Timers, signals, escalations, link and terminate events, event sub-processes, inclusive and event-based gateways, receive and send tasks, data, and forms as they are shown to a user are covered by the conformance cases (their exported XML is fixed and checked by the BPMN rules) but are not driven on Camunda.
  • Decision services, imports of other DMN models and externally defined functions are not in the language (dmn-tck.md, Selection).
  • The coverage pages of Camunda list what the engine executes; elements Camunda Modeler draws but the engine rejects are the rows of the last table.