Repository navigation
textbox Caption: passes check and exec and is silently not written (inputs take Label:); check has no "property this widget does not have" warning #1651
Description
mxcli v0.28.0 (2026-10-23) · Mendix 11.14.0 (blank repro project) — first hit in an 11.15.0 app · OS Windows Server 2025
Summary
textbox name (Attribute: X, Caption: 'Some label') passes check and exec, and the caption is silently not written: describe page reads the text box back with no label, mx check reports 0 errors, and the page renders an input with no label at all. Input widgets take Label:; Caption: is the action button's and the column's property name, which is exactly why it gets written on a text box by mistake.
This is the same class as several fixed one-property cases — #1307 (action button tooltip), #1567 (quoted Editable:), #1582 (container RenderMode), #1465 (tab page CaptionParams / Visible:) — and the open #1643 (text filter Placeholder: / Adjustable:). What would close the class rather than the next instance: check refusing (or at least warning on) a property the widget does not have.
Minimal repro
create module ModC;
create persistent entity ModC.Item (Name: String(50));
create page ModC.ItemEdit
(
Title: 'Item',
Layout: Atlas_Core.PopupLayout,
Params: ( $Item: ModC.Item )
)
{
dataview dvItem (DataSource: $Item) {
textbox tbName (Attribute: Name, Caption: 'Item name')
textbox tbName2 (Attribute: Name, Label: 'Item name (Label)')
}
};Expected
check says that textbox has no Caption property (ideally: "did you mean Label:?"), or exec maps it to the label. Either is fine; silently dropping it is the problem.
Actual
$ mxcli check <repro>/scripts/ewo_caption.mdl -p Repro.mpr --references
⚠ page ModC.ItemEdit: DataView `dvItem` contains input fields but is not inside a layout grid … [MPR010]
1 issues: 0 errors, 1 warnings, 0 info
Check passed!
$ mxcli exec <repro>/scripts/ewo_caption.mdl -p Repro.mpr
Created module: ModC
Created entity: ModC.Item
Created page ModC.ItemEdit
$ mxcli -p Repro.mpr -c "describe page ModC.ItemEdit"
create or modify page ModC.ItemEdit (Title: 'Item', Layout: Atlas_Core.PopupLayout, Params: ( $Item: ModC.Item )) {
dataview dvItem (DataSource: $Item, ReadOnlyStyle: Control) {
-- Context: $currentObject (ModC.Item)
textbox tbName (Attribute: Name)
textbox tbName2 (Label: 'Item name (Label)', Attribute: Name)
}
};
$ mx check Repro.mpr
The app contains: 0 errors.
(The only warning is the unrelated MPR010 layout-grid hint; the repro leaves the layout grid out to stay minimal. In the app where this was found the data view was inside a layout grid and the result was the same.)
Suggestion
A per-widget allow-list of property names in the page checker, with a "did you mean" for the common cross-widget mix-ups (Caption↔Label on inputs and buttons, Content↔Caption, Placeholder on widgets that have none).
Workaround we use
Label: on every input widget, and a browser review of every new dialog — the missing label was found by eye, not by any check.
Session log (isolated HOME, repro project only; local paths replaced by <repro>)
{"level": "INFO", "msg": "session_start", "version": "v0.28.0", "go": "go1.27.3", "os": "windows", "arch": "amd64", "mode": "mxcli check", "args": ["C:\\Tools\\mxcli.exe", "check", "<repro>/scripts/ewo_caption.mdl", "-p", "Repro.mpr", "--references"]}
{"level": "INFO", "msg": "connect", "mpr_path": "Repro.mpr", "mendix_version": "11.14.0", "mpr_format": 2}
{"level": "INFO", "msg": "execute", "stmt_type": "ConnectStmt", "stmt_summary": "connect local 'Repro.mpr'", "duration_ms": 0}
{"level": "INFO", "msg": "session_end", "commands_executed": 1, "errors_count": 0, "duration_s": 2}
{"level": "INFO", "msg": "session_start", "version": "v0.28.0", "go": "go1.27.3", "os": "windows", "arch": "amd64", "mode": "mxcli exec", "args": ["C:\\Tools\\mxcli.exe", "exec", "<repro>/scripts/ewo_caption.mdl", "-p", "Repro.mpr"]}
{"level": "INFO", "msg": "connect", "mpr_path": "Repro.mpr", "mendix_version": "11.14.0", "mpr_format": 2}
{"level": "INFO", "msg": "execute", "stmt_type": "ConnectStmt", "stmt_summary": "connect local 'Repro.mpr'", "duration_ms": 2}
{"level": "INFO", "msg": "execute", "stmt_type": "CreateModuleStmt", "stmt_summary": "create module ModC", "duration_ms": 133}
{"level": "INFO", "msg": "execute", "stmt_type": "CreateEntityStmt", "stmt_summary": "create entity ModC.Item", "duration_ms": 69}
{"level": "INFO", "msg": "execute", "stmt_type": "CreatePageStmtV3", "stmt_summary": "create page ModC.ItemEdit", "duration_ms": 84}
{"level": "INFO", "msg": "session_end", "commands_executed": 4, "errors_count": 0, "duration_s": 0}
{"level": "INFO", "msg": "session_start", "version": "v0.28.0", "go": "go1.27.3", "os": "windows", "arch": "amd64", "mode": "batch", "args": ["C:\\Tools\\mxcli.exe", "-p", "Repro.mpr", "-c", "describe page ModC.ItemEdit"]}
{"level": "INFO", "msg": "connect", "mpr_path": "Repro.mpr", "mendix_version": "11.14.0", "mpr_format": 2}
{"level": "INFO", "msg": "execute", "stmt_type": "ConnectStmt", "stmt_summary": "connect local 'Repro.mpr'", "duration_ms": 1}
{"level": "INFO", "msg": "execute", "stmt_type": "DescribeStmt", "stmt_summary": "describe PAGE ModC.ItemEdit", "duration_ms": 24}
{"level": "INFO", "msg": "session_end", "commands_executed": 2, "errors_count": 0, "duration_s": 0}
Activity
Merge pull request #1740 from ako/fix/1645-reserved-member-names