Skip to content

Workflow CALL MICROFLOW: a fully-qualified WITH key is double-prefixed, producing an MPR that Studio Pro cannot open #844

Description

@MendixMau

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 #41not 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions