Follow-up to ADR-0031 / #1479 (now complete).
The model-level BPMN ⇄ structured-construct mapping shipped in #1500 (@objectstack/spec automation/bpmn-mapping.ts): exportConstructsToBpmn / importBpmnToConstructs translate between the structured constructs (loop/parallel/try_catch) and the BPMN gateway/boundary/multi-instance vocabulary on the flow model, round-trippable via the osConstruct extension marker.
What's still missing is the wire format: actual BPMN 2.0 XML parse/emit, so flows round-trip with external BPM tools (Camunda, Activiti, jBPM, …).
Scope
- A plugin (per
automation/bpmn-interop.zod.ts, which already defines BpmnImportOptions / BpmnExportOptions / BpmnInteropResult / BUILT_IN_BPMN_MAPPINGS) that:
- parses BPMN 2.0 XML → flat flow graph, then calls
importBpmnToConstructs to fold gateways/boundary/multi-instance into constructs;
- takes a flow, calls
exportConstructsToBpmn, then emits BPMN 2.0 XML (incl. DI layout from node positions, and extensionElements carrying the osConstruct marker for lossless round-trip).
- Honour
BpmnImportOptions.unmappedStrategy and surface BpmnDiagnostics.
Notes
- Needs an XML parser/serializer dependency — keep it in the plugin, not core.
- ADR-0031 marks XML interop "Priority: Low", so this is deliberately deferred from the core roadmap.
Follow-up to ADR-0031 / #1479 (now complete).
The model-level BPMN ⇄ structured-construct mapping shipped in #1500 (
@objectstack/specautomation/bpmn-mapping.ts):exportConstructsToBpmn/importBpmnToConstructstranslate between the structured constructs (loop/parallel/try_catch) and the BPMN gateway/boundary/multi-instance vocabulary on the flow model, round-trippable via theosConstructextension marker.What's still missing is the wire format: actual BPMN 2.0 XML parse/emit, so flows round-trip with external BPM tools (Camunda, Activiti, jBPM, …).
Scope
automation/bpmn-interop.zod.ts, which already definesBpmnImportOptions/BpmnExportOptions/BpmnInteropResult/BUILT_IN_BPMN_MAPPINGS) that:importBpmnToConstructsto fold gateways/boundary/multi-instance into constructs;exportConstructsToBpmn, then emits BPMN 2.0 XML (incl. DI layout from node positions, andextensionElementscarrying theosConstructmarker for lossless round-trip).BpmnImportOptions.unmappedStrategyand surfaceBpmnDiagnostics.Notes