You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
BPMN designer contract, per-designer Studio modules and a shared conformance suite #8927
Phase 3 groundwork of #8898, per ADR Offer selectable BPMN designers (#8926).
Change
Define the BPMN designer contract: load (returns { imported, error?, warnings }), save, select, applyOverlays/clearOverlays, change/selection events, dispose. Start from the payload shapes the spike used (Spike: host a bpmn-js modeler in the Blazor Studio #8901).
Split designers into Studio modules (for example Elsa.Studio.Bpmn.BpmnJs, Elsa.Studio.Bpmn.X6). The BPMN feature enables bpmn-js when the host enables no designer, and a designer that isn't enabled adds nothing to the download.
Put the canvas-independent rules in shared code:
the elsa: binding model;
DI generation for documents without DI;
the save flow that requires explicit acknowledgement after a load warning reports dropped content.
Build one conformance suite that every designer must pass:
round-trip preservation of elsa: extensions, foreign extensions and attributes, subprocess bodies at every depth, and DI;
[Claude] Decisions from the owner on the open #8927 questions:
Default flip: bpmn-js becomes the default canvas in the same release that adds XML save (PUT bpmn/definitions/{id}/xml, D3), not before. Until then it ships as a selectable designer and X6 stays the default, so the view never loses its fallback-layout diagnostics or its subprocess drill-down while still read-only.
Download: until the flip there is no hard reference from Elsa.Studio.Workflows to the bpmn-js module. With no designer registered, the resolver falls back to X6, and hosts opt into bpmn-js by registering its module. At the flip the reference is added, so the small wrapper DLL ships to every host; the JS bundle stays lazy.
Contract documentation:
A spec under studio/docs/specs/ defines "BPMN designer contract v1": methods, getBinding/setBinding, SetBindingResult, the readOnly option, events and the contractVersion rule.
The selectable-designers ADR gets one line that names the contract and links to the spec.
"DI preserved" in the conformance suite: every shape keeps its bounds and every edge its waypoints, matched by element id, whichever diagram plane holds them. A plane move, such as bpmn-js moving a legacy collapsed subprocess's contents to its own plane, is reported as a rewritten load warning, and the suite asserts that the warning appears.
The default flip (feat(studio): make bpmn-js the default BPMN designer #9038): AddWorkflowsModule falls back to bpmn-js when a host enables no designer. A designer the host enables takes precedence. Elsa.Studio.Bpmn.BpmnJs is now packable, and its bundle is checked in the package proof.
What remains: the X6 designer module (plan step 6) is the work of #8928. Until then, the read-only X6 view shows only BPMN scopes that have no source document, and a host that removes the default.
Activity
sfmskywalker commentedon Oct 22, 2026
[Claude] Decisions from the owner on the open #8927 questions:
PUT bpmn/definitions/{id}/xml, D3), not before. Until then it ships as a selectable designer and X6 stays the default, so the view never loses its fallback-layout diagnostics or its subprocess drill-down while still read-only.Elsa.Studio.Workflowsto the bpmn-js module. With no designer registered, the resolver falls back to X6, and hosts opt into bpmn-js by registering its module. At the flip the reference is added, so the small wrapper DLL ships to every host; the JS bundle stays lazy.studio/docs/specs/defines "BPMN designer contract v1": methods,getBinding/setBinding,SetBindingResult, thereadOnlyoption, events and thecontractVersionrule.rewrittenload warning, and the suite asserts that the warning appears.Plan changes:
Generated by Claude Code
feat(studio): add the BPMN designer contract and its shared binding a…
feat(studio): client for the BPMN XML endpoints (#9024)
feat(studio): choose and host a BPMN designer in the Blazor Studio (#…
sfmskywalker commentedon Oct 22, 2026
[Claude] Every "Done when" item has landed on
main, so I'm closing this issue.What shipped:
BpmnDesignerResolverandBpmnCanvasHost.PUT bpmn/definitions/{id}/xml(D3: feat(bpmn): save a BPMN workflow as XML through GET/PUT bpmn/definitions/{id}/xml #8995, feat(bpmn): create a BPMN workflow from scratch with POST bpmn/definitions #8998).elsa:bindings through the contract'sgetBinding/setBinding.AddWorkflowsModulefalls back to bpmn-js when a host enables no designer. A designer the host enables takes precedence.Elsa.Studio.Bpmn.BpmnJsis now packable, and its bundle is checked in the package proof.What remains: the X6 designer module (plan step 6) is the work of #8928. Until then, the read-only X6 view shows only BPMN scopes that have no source document, and a host that removes the default.
Generated by Claude Code