Repo: mendixlabs/mxcli
Affects: v0.16.0 (current Latest release, built 2026-07-12)
Mendix: 11.13.0 (project format 11.13.0)
Severity: High — the written model becomes unloadable; mx check hard-crashes and Studio Pro cannot open the project.
Status of fix: Already fixed in main (2099bbe1, 2026-07-29, FINDINGS #41 — not 253d60d8,
which is a same-day, unrelated fix for the $Type storage-name defect in the companion report).
This report is effectively "please cut a release" — plus a docs fix that is not covered by
that commit.
Corrected 2026-08-05: an earlier draft of this report credited 253d60d8 for this fix.
Reading that commit directly shows it only version-gates the workflow $Type storage name
(see the companion report) and touches no WITH-key or parameter-mapping code. The actual fix —
normalizing a qualified/quoted WITH mapping name to its bare form — is 2099bbe1, committed
9 minutes later the same day. Confirmed 2099bbe1 is an ancestor of 504aec67, the binary used
in this project's A/B testing, so the evidence below is unaffected.
Summary
When a workflow body calls a microflow with a parameter mapping, mxcli unconditionally prepends
<Module>.<Microflow>. to the WITH key before storing it. Supplying a short key therefore
works; supplying the fully-qualified key — the form the bundled write-workflows skill
documents — yields a doubled, unresolvable parameter reference:
TFC.WF_ACT_TCCopilot_Prefill.TFC.WF_ACT_TCCopilot_Prefill.TFCStub
On load, MicroflowCallParameterMapping.set_ParameterId receives null and throws. Both
mxcli check --references and mxcli exec report success first, so nothing warns the user until
the model is already written and Studio Pro refuses to open it.
Reproduction
Target microflow has a single entity-typed parameter ($TFCStub: TFC.TFCStub).
CREATE WORKFLOW TFC."WF_ProbeA"
PARAMETER $WorkflowContext: TFC."TFCStub"
BEGIN
CALL MICROFLOW TFC.WF_ACT_TCCopilot_Prefill
WITH (TFC.WF_ACT_TCCopilot_Prefill.TFCStub = '$workflowContext');
END WORKFLOW;
./mxcli check probe.mdl -p App.mpr --references # => Check passed!
./mxcli exec probe.mdl -p App.mpr # => Created workflow: TFC.WF_ProbeA
"…/Mendix Studio Pro 11.13.0 Beta.app/Contents/modeler/mx" check App.mpr
Actual
ERROR: System.AggregateException: One or more errors occurred. (An error occurred when trying to
set the 'Parameter' property of a Microflow call parameter mapping in a Workflow with ID
b43e8cc8-4821-48be-9cdb-dcc674fd568f.)
---> System.InvalidOperationException: …
---> System.Reflection.TargetInvocationException: …
---> System.ArgumentNullException: Value cannot be null. (Parameter 'value')
at Mendix.Modeler.Workflows.Model.MicroflowCallParameterMapping.set_ParameterId(MicroflowParameterIdentifier value)
at Mendix.Modeler.Storage.Operations.StreamingBsonUnitReader.SetValue(…)
at Mendix.Modeler.Storage.Operations.UnitLoader.ConstructUnits()
Studio Pro cannot open the project at all until the workflow is removed.
Expected
Either the fully-qualified key resolves (it is a legal, documented spelling), or mxcli check
rejects it before exec writes an unloadable model.
Trigger boundary — four variants, same project, same binary, same gate
BSON read directly out of mprcontents/*.mxunit in every row, so this is what was stored, not what
mxcli's own reader reports.
| # |
WITH clause |
Stored Parameter |
mx check |
| A |
WITH (TFC.WF_ACT_TCCopilot_Prefill.TFCStub = '$workflowContext') |
TFC.WF_…Prefill.TFC.WF_…Prefill.TFCStub (doubled) |
CRASH |
| B |
WITH (TFCStub = '$WorkflowContext') |
TFC.WF_…Prefill.TFCStub ✔ |
0 errors |
| C |
omitted entirely |
TFC.WF_…Prefill.TFCStub ✔ (auto-synthesized) |
0 errors |
| D |
WITH (TFCStub = '$workflowContext') (lowercase ctx) |
TFC.WF_…Prefill.TFCStub ✔ |
0 errors |
Only the fully-qualified key fails. Note C: when the WITH clause is omitted, mxcli
synthesizes a correct mapping on its own — the safest form on this release.
Documentation defect (separate from the code fix)
The write-workflows skill bundled with v0.16.0 teaches the crashing form in its main example:
call microflow Module.ACT_Validate
with (Module.ACT_Validate.Item = '$workflowContext');
A user following the shipped documentation produces an unloadable model on the first try. Even
after 2099bbe1 normalizes the key, this example is worth changing to the short form — and the
same example's lowercase $workflowContext interacts with the DECISION casing issue filed
separately.
Why v0.16.0 still matters
gh release list --repo mendixlabs/mxcli shows v0.16.0 tagged Latest; the 2026-08-03
nightly (689e8ce4) is a Pre-release. Every user on the current official release hits this on
Mendix 11.13. On 11.12.1 the same null produced a silent bad binding rather than a load failure,
so 11.13's stricter loader is what turned this from a latent bug into a blocker.
Workaround for users on v0.16.0
Use the short WITH key, or omit the WITH clause entirely and let mxcli synthesize the mapping.
Dragging the activity in by hand in Studio Pro is not necessary.
Recovery from an already-broken model
mxcli can still read a model Studio Pro's loader rejects, so this is surgical — no restore needed:
./mxcli -p App.mpr -c "DROP WORKFLOW <Module>.<BadWorkflow>"
Verified here: straight back to 0 errors, with the unrelated production workflow (10 activities /
3 user tasks) fully intact.
Environment
- mxcli
v0.16.0 (2026-07-12T11:44:17Z)
- Mendix Studio Pro 11.13.0 Beta; gated with that bundle's own
mx
- macOS 15 (Darwin 25.5.0), Apple silicon
- Probed in a throwaway
rsync copy of a real project in /tmp; baseline 0 errors before each arm
Repo:
mendixlabs/mxcliAffects:
v0.16.0(current Latest release, built 2026-07-12)Mendix: 11.13.0 (project format 11.13.0)
Severity: High — the written model becomes unloadable;
mx checkhard-crashes and Studio Pro cannot open the project.Status of fix: Already fixed in
main(2099bbe1, 2026-07-29, FINDINGS #41 — not253d60d8,which is a same-day, unrelated fix for the
$Typestorage-name defect in the companion report).This report is effectively "please cut a release" — plus a docs fix that is not covered by
that commit.
Summary
When a workflow body calls a microflow with a parameter mapping, mxcli unconditionally prepends
<Module>.<Microflow>.to theWITHkey before storing it. Supplying a short key thereforeworks; supplying the fully-qualified key — the form the bundled
write-workflowsskilldocuments — yields a doubled, unresolvable parameter reference:
On load,
MicroflowCallParameterMapping.set_ParameterIdreceivesnulland throws. Bothmxcli check --referencesandmxcli execreport success first, so nothing warns the user untilthe model is already written and Studio Pro refuses to open it.
Reproduction
Target microflow has a single entity-typed parameter (
$TFCStub: TFC.TFCStub).Actual
Studio Pro cannot open the project at all until the workflow is removed.
Expected
Either the fully-qualified key resolves (it is a legal, documented spelling), or
mxcli checkrejects it before
execwrites an unloadable model.Trigger boundary — four variants, same project, same binary, same gate
BSON read directly out of
mprcontents/*.mxunitin every row, so this is what was stored, not whatmxcli's own reader reports.
WITHclauseParametermx checkWITH (TFC.WF_ACT_TCCopilot_Prefill.TFCStub = '$workflowContext')TFC.WF_…Prefill.TFC.WF_…Prefill.TFCStub(doubled)WITH (TFCStub = '$WorkflowContext')TFC.WF_…Prefill.TFCStub✔TFC.WF_…Prefill.TFCStub✔ (auto-synthesized)WITH (TFCStub = '$workflowContext')(lowercase ctx)TFC.WF_…Prefill.TFCStub✔Only the fully-qualified key fails. Note C: when the
WITHclause is omitted, mxclisynthesizes a correct mapping on its own — the safest form on this release.
Documentation defect (separate from the code fix)
The
write-workflowsskill bundled with v0.16.0 teaches the crashing form in its main example:A user following the shipped documentation produces an unloadable model on the first try. Even
after
2099bbe1normalizes the key, this example is worth changing to the short form — and thesame example's lowercase
$workflowContextinteracts with the DECISION casing issue filedseparately.
Why
v0.16.0still mattersgh release list --repo mendixlabs/mxclishowsv0.16.0tagged Latest; the2026-08-03nightly (
689e8ce4) is a Pre-release. Every user on the current official release hits this onMendix 11.13. On 11.12.1 the same null produced a silent bad binding rather than a load failure,
so 11.13's stricter loader is what turned this from a latent bug into a blocker.
Workaround for users on v0.16.0
Use the short
WITHkey, or omit theWITHclause entirely and let mxcli synthesize the mapping.Dragging the activity in by hand in Studio Pro is not necessary.
Recovery from an already-broken model
mxcli can still read a model Studio Pro's loader rejects, so this is surgical — no restore needed:
./mxcli -p App.mpr -c "DROP WORKFLOW <Module>.<BadWorkflow>"Verified here: straight back to
0 errors, with the unrelated production workflow (10 activities /3 user tasks) fully intact.
Environment
v0.16.0 (2026-07-12T11:44:17Z)mxrsynccopy of a real project in/tmp; baseline0 errorsbefore each arm