Repository navigation
describe layout drops the scroll container's LayoutMode and create layout cannot write it: a describe-and-copy of Atlas_SideBar becomes a Headline layout (LayoutMode: silently ignored; check/exec/mx check pass) #1659
Description
mxcli v0.28.0 (2026-10-23) · Mendix 11.14.0 (blank app, Atlas_Core as shipped) · Windows Server 2025
Summary
A responsive layout's scroll container has a LayoutMode (Forms$ScrollContainer.LayoutMode: Headline or
Sidebar). It decides the frame: in Sidebar mode the left region runs the full height and the top bar sits beside
it; in Headline mode the top bar runs the full width and the left region starts under it. Atlas_SideBar and
Atlas_TopBar are stored as Sidebar, Atlas_Default as Headline.
describe layout does not print it, and create layout has no way to write it, so the documented way to copy an Atlas
layout ("describe it, rename it, run it" - mxcli syntax layout.show) turns Atlas_SideBar into a Headline
layout. Writing (LayoutMode: 'Sidebar') on the scroll container passes check and exec and is silently dropped.
mx check reports 0 errors either way: the copy simply renders a different frame.
Minimal repro
mxcli -p Repro.mpr -c "describe layout Atlas_Core.Atlas_SideBar"- the scroll container line is printed bare:
create or modify layout Atlas_Core.Atlas_SideBar (
layouttype: 'Responsive',
class: 'layout-atlas layout-atlas-responsive-sidebar'
) {
scrollcontainer layoutContainer {
region top (Size: 48, Class: 'border-bottom') {
...- Rename to
ModL.Copy_SideBar, prefixcreate module ModL;,check(passes) andexec(passes). - Variant: the same with
scrollcontainer layoutContainer (LayoutMode: 'Sidebar') {asModL.Copy_SideBar2-
checkpasses,execpasses.
Expected
describe prints the mode when it is not the default, and create writes it, e.g.
scrollcontainer layoutContainer (LayoutMode: Sidebar) {and an unknown or unsupported scroll-container property is refused by check rather than dropped.
Actual (read back with a BSON dump of each unit)
| Layout | LayoutMode stored |
|---|---|
Atlas_Core.Atlas_SideBar (original) |
Sidebar |
Atlas_Core.Atlas_TopBar (original) |
Sidebar |
Atlas_Core.Atlas_Default (original) |
Headline |
ModL.Copy_SideBar (describe → create) |
Headline |
ModL.Copy_SideBar2 (with LayoutMode: 'Sidebar' written) |
Headline |
mx check Repro.mpr: 0 errors after both.
What narrows it down
- Not syntax:
checkaccepts the property and reports "Syntax OK";execreports "Created layout". - Everything
describeprints round-trips:describe layout ModL.Copy_SideBaris identical (names aligned) to
describe layout Atlas_Core.Atlas_SideBar- so the difference is invisible to mxcli itself; only the unit shows it.
The container-level mode is the one property lost. Same family ascreate layout: a container'sRenderModeis silently dropped; check and exec pass #1582 (a container'sRenderModesilently dropped, fixed) and navigationtree: a menu-document source is dropped by describe, replaced by exec, and Menu: is silently ignored #1189 (a navigation
tree's menu source dropped by describe). - The
layoutsyntax help lists no property forSCROLLCONTAINERat all.
Suggestions
- Print
LayoutModeindescribe layoutwhen it isSidebar, and accept it increate [or modify] layout. - Make
checkrefuse a property the scroll container does not support (the textboxCaption:case, textboxCaption:passes check and exec and is silently not written (inputs takeLabel:); check has no "property this widget does not have" warning #1651, is the
same class of silent drop).
Workaround we use
None needed for the layout we built - EWO's own shell wanted the full-width top bar of Headline mode (it is what the
product's prototype draws) - but the copy had to be compared with the original unit by unit to notice, because nothing
reports the difference. A team that copies Atlas_SideBar to drop its feedback widget gets a different frame and
Atlas's sidebar CSS positioned for the other one.
Session log (isolated HOME; local path replaced by <repro>)
{"time":"2026-10-26T00:18:12.1592081+03:00","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 layout Atlas_Core.Atlas_SideBar"],"pid":20364,"parent_pid":""}
{"time":"2026-10-26T00:18:12.1947129+03:00","level":"INFO","msg":"connect","mpr_path":"Repro.mpr","mendix_version":"11.14.0","mpr_format":2}
{"time":"2026-10-26T00:18:12.1947129+03:00","level":"INFO","msg":"execute","stmt_type":"ConnectStmt","stmt_summary":"connect local 'Repro.mpr'","duration_ms":1}
{"time":"2026-10-26T00:18:12.349757+03:00","level":"INFO","msg":"execute","stmt_type":"DescribeStmt","stmt_summary":"describe LAYOUT Atlas_Core.Atlas_SideBar","duration_ms":136}
{"time":"2026-10-26T00:18:12.3514985+03:00","level":"INFO","msg":"session_end","commands_executed":2,"errors_count":0,"duration_s":0,"pid":20364}
{"time":"2026-10-26T00:18:12.9219636+03:00","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_lm1.mdl","-p","Repro.mpr"],"pid":68744,"parent_pid":""}
{"time":"2026-10-26T00:18:14.786389+03:00","level":"INFO","msg":"connect","mpr_path":"Repro.mpr","mendix_version":"11.14.0","mpr_format":2}
{"time":"2026-10-26T00:18:14.7867102+03:00","level":"INFO","msg":"execute","stmt_type":"ConnectStmt","stmt_summary":"connect local 'Repro.mpr'","duration_ms":1}
{"time":"2026-10-26T00:18:15.0947422+03:00","level":"INFO","msg":"session_end","commands_executed":1,"errors_count":0,"duration_s":2,"pid":68744}
{"time":"2026-10-26T00:18:15.672257+03:00","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_lm1.mdl","-p","Repro.mpr"],"pid":45312,"parent_pid":""}
{"time":"2026-10-26T00:18:15.7179225+03:00","level":"INFO","msg":"connect","mpr_path":"Repro.mpr","mendix_version":"11.14.0","mpr_format":2}
{"time":"2026-10-26T00:18:15.7179225+03:00","level":"INFO","msg":"execute","stmt_type":"ConnectStmt","stmt_summary":"connect local 'Repro.mpr'","duration_ms":1}
{"time":"2026-10-26T00:18:16.2888978+03:00","level":"INFO","msg":"execute","stmt_type":"CreateModuleStmt","stmt_summary":"create module ModL","duration_ms":116}
{"time":"2026-10-26T00:18:16.4610428+03:00","level":"INFO","msg":"execute","stmt_type":"CreateLayoutStmt","stmt_summary":"create layout ModL.Copy_SideBar","duration_ms":172}
{"time":"2026-10-26T00:18:16.4682663+03:00","level":"INFO","msg":"session_end","commands_executed":3,"errors_count":0,"duration_s":0,"pid":45312}
{"time":"2026-10-26T00:18:26.5108826+03:00","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 layout ModL.Copy_SideBar"],"pid":37472,"parent_pid":""}
{"time":"2026-10-26T00:18:26.5509701+03:00","level":"INFO","msg":"connect","mpr_path":"Repro.mpr","mendix_version":"11.14.0","mpr_format":2}
{"time":"2026-10-26T00:18:26.5509701+03:00","level":"INFO","msg":"execute","stmt_type":"ConnectStmt","stmt_summary":"connect local 'Repro.mpr'","duration_ms":1}
{"time":"2026-10-26T00:18:26.6082695+03:00","level":"INFO","msg":"execute","stmt_type":"DescribeStmt","stmt_summary":"describe LAYOUT ModL.Copy_SideBar","duration_ms":39}
{"time":"2026-10-26T00:18:26.6086628+03:00","level":"INFO","msg":"session_end","commands_executed":2,"errors_count":0,"duration_s":0,"pid":37472}
{"time":"2026-10-26T00:18:27.1885964+03:00","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 layout Atlas_Core.Atlas_SideBar"],"pid":59344,"parent_pid":""}
{"time":"2026-10-26T00:18:27.2303497+03:00","level":"INFO","msg":"connect","mpr_path":"Repro.mpr","mendix_version":"11.14.0","mpr_format":2}
{"time":"2026-10-26T00:18:27.2306874+03:00","level":"INFO","msg":"execute","stmt_type":"ConnectStmt","stmt_summary":"connect local 'Repro.mpr'","duration_ms":2}
{"time":"2026-10-26T00:18:27.2790211+03:00","level":"INFO","msg":"execute","stmt_type":"DescribeStmt","stmt_summary":"describe LAYOUT Atlas_Core.Atlas_SideBar","duration_ms":33}
{"time":"2026-10-26T00:18:27.2796494+03:00","level":"INFO","msg":"session_end","commands_executed":2,"errors_count":0,"duration_s":0,"pid":59344}
{"time":"2026-10-26T00:18:28.3584269+03:00","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_lm2.mdl","-p","Repro.mpr"],"pid":26180,"parent_pid":""}
{"time":"2026-10-26T00:18:28.5934173+03:00","level":"INFO","msg":"connect","mpr_path":"Repro.mpr","mendix_version":"11.14.0","mpr_format":2}
{"time":"2026-10-26T00:18:28.5941388+03:00","level":"INFO","msg":"execute","stmt_type":"ConnectStmt","stmt_summary":"connect local 'Repro.mpr'","duration_ms":1}
{"time":"2026-10-26T00:18:28.9625735+03:00","level":"INFO","msg":"session_end","commands_executed":1,"errors_count":0,"duration_s":0,"pid":26180}
{"time":"2026-10-26T00:18:29.5621955+03:00","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_lm2.mdl","-p","Repro.mpr"],"pid":18568,"parent_pid":""}
{"time":"2026-10-26T00:18:29.6023631+03:00","level":"INFO","msg":"connect","mpr_path":"Repro.mpr","mendix_version":"11.14.0","mpr_format":2}
{"time":"2026-10-26T00:18:29.6023631+03:00","level":"INFO","msg":"execute","stmt_type":"ConnectStmt","stmt_summary":"connect local 'Repro.mpr'","duration_ms":1}
{"time":"2026-10-26T00:18:30.2268648+03:00","level":"INFO","msg":"execute","stmt_type":"CreateLayoutStmt","stmt_summary":"create layout ModL.Copy_SideBar2","duration_ms":179}
{"time":"2026-10-26T00:18:30.2311656+03:00","level":"INFO","msg":"session_end","commands_executed":2,"errors_count":0,"duration_s":0,"pid":18568}
Activity
Merge pull request mendixlabs#1659 from ako/claude/inspiring-feynman-…
fix: describe and create layout keep a scroll container's LayoutMode (a…