Two CE0463 cases on Mendix 11.9 trace to the same architectural gap: the BSON serializer has no per-property visibility metadata.
Symptoms
Run mx check on mx-test-projects/test5-app/test5.mpr (Mendix 11.9.0):
[error] [CE0463] "The definition of this widget has changed..." at Timeline 'timelineCustom1'
[error] [CE0463] "The definition of this widget has changed..." at Video Player 'video1'
| Page |
Widget |
What we emit |
What Studio Pro's "Update widget" produces |
PW.P_PW02_Properties |
VideoPlayer video1 (type: 'expression') |
Populated empty Forms$ClientTemplate on videoUrl + posterUrl |
null (hidden when type='expression') |
PW.P_PW08_MultiSlot |
Timeline timelineCustom1 (customVisualization: true) |
null on title / description / timeIndication |
Populated empty Forms$ClientTemplate (always visible) |
Reference baselines: P_PW02_Properties_2 and P_PW08_MultiSlot_2 in the same project — Studio Pro–updated copies that pass mx check cleanly.
Root cause
Property visibility for pluggable widgets isn't declared in widget.xml — it lives in editorConfig.js as imperative JavaScript calling Mendix's hidePropertyIn / hidePropertiesIn / hideNestedPropertiesIn helpers. Example from VideoPlayer's compiled editorConfig.js:
exports.getProperties = function (e, t, r) {
"dynamic" === e.type && F.hidePropertiesIn(t, e, ["urlExpression", "posterExpression"]);
"expression" === e.type && F.hidePropertiesIn(t, e, ["videoUrl", "posterUrl"]);
"aspectRatio" === e.heightUnit
? F.hidePropertyIn(t, e, "height")
: F.hidePropertyIn(t, e, "heightAspectRatio");
...
};
mxcli's serializer has no visibility into this, so it emits the embedded template's defaults regardless of the widget's active configuration. Two specific call sites:
sdk/mpr/writer_widgets_custom.go:229 — serializeWidgetValueForRawType hardcodes TextTemplate: nil (Timeline's under-population)
- The RawType clone path that preserves the embedded template's populated
ClientTemplate as-is (VideoPlayer's over-population)
Proposed fix
See docs/11-proposals/PROPOSAL_widget_property_visibility.md (committed in 0ad1b753) for the full design. Summary:
- Extend
.def.json with a propertyVisibility[] field expressing simple eq / ne / truthy / falsy / and / or conditions.
- Static-analyze
editorConfig.js during mxcli widget init to populate it (pattern-match the three known helpers; fall back to "unsupported" for non-equality rules).
- At serialization time, evaluate each rule against the widget's current property values to decide
TextTemplate: null vs populated ClientTemplate.
Phasing
- Phase 1 — hand-author rules for VideoPlayer + Timeline and wire the serializer through. Closes both CE0463 cases above.
- Phase 2 — build the JS extractor and regenerate
propertyVisibility[] for all embedded definitions.
- Phase 3 — extend to
hideNestedPropertiesIn (Accordion groups, DataGrid columns).
Phase 1 alone fixes the immediate symptom.
Related
Two CE0463 cases on Mendix 11.9 trace to the same architectural gap: the BSON serializer has no per-property visibility metadata.
Symptoms
Run
mx checkonmx-test-projects/test5-app/test5.mpr(Mendix 11.9.0):PW.P_PW02_Propertiesvideo1(type: 'expression')Forms$ClientTemplateonvideoUrl+posterUrlnull(hidden whentype='expression')PW.P_PW08_MultiSlottimelineCustom1(customVisualization: true)nullontitle/description/timeIndicationForms$ClientTemplate(always visible)Reference baselines:
P_PW02_Properties_2andP_PW08_MultiSlot_2in the same project — Studio Pro–updated copies that passmx checkcleanly.Root cause
Property visibility for pluggable widgets isn't declared in
widget.xml— it lives ineditorConfig.jsas imperative JavaScript calling Mendix'shidePropertyIn/hidePropertiesIn/hideNestedPropertiesInhelpers. Example from VideoPlayer's compilededitorConfig.js:mxcli's serializer has no visibility into this, so it emits the embedded template's defaults regardless of the widget's active configuration. Two specific call sites:
sdk/mpr/writer_widgets_custom.go:229—serializeWidgetValueForRawTypehardcodesTextTemplate: nil(Timeline's under-population)ClientTemplateas-is (VideoPlayer's over-population)Proposed fix
See
docs/11-proposals/PROPOSAL_widget_property_visibility.md(committed in0ad1b753) for the full design. Summary:.def.jsonwith apropertyVisibility[]field expressing simpleeq/ne/truthy/falsy/and/orconditions.editorConfig.jsduringmxcli widget initto populate it (pattern-match the three known helpers; fall back to"unsupported"for non-equality rules).TextTemplate: nullvs populatedClientTemplate.Phasing
propertyVisibility[]for all embedded definitions.hideNestedPropertiesIn(Accordion groups, DataGrid columns).Phase 1 alone fixes the immediate symptom.
Related
4ea402c2) — same TextTemplate-null pattern, but only for object-list paths.docs/03-development/WIDGET_BSON_VERSION_COMPATIBILITY.md— broader CE0463 patch ledger; this issue belongs to that family.