Skip to content

Sync: navigation menu actions, view-entity OQL checks, Vega JSON numbers - #1296

Merged
ako merged 21 commits into
mendixlabs:mainfrom
ako:main
Oct 4, 2026
Merged

ako merged 21 commits into
mendixlabs:mainfrom
ako:main

Conversation

@ako

@ako ako commented Oct 4, 2026

Copy link
Copy Markdown
Collaborator

Syncs ako#983–ako#985 (fast-forward; mendixlabs main has nothing ako lacks). Fixes from the JTSBootLogboek findings (H15–H18).

Navigation menu actions (ako#985)

  • Describe → exec of navigation silently dropped menu actions it could not print: nanoflow, open link and create object became "no action", microflow settings were lost, and a page title override was lost. Every action kind now describes and re-writes through the shared client-action renderer and serializer, for navigation and menu documents.
  • A stored action the script does not state is kept rather than dropped.
  • Measured on TestApp: describe → exec of the whole navigation leaves the unit byte-identical, and a fresh write of every kind passes mx check.
  • Also fixed: a multi-line sync constraint was rewritten on every run, and menu documents lost their glyph/image icons.
  • Native profiles: menu, login, not-found and sync-error blocks are refused instead of silently ignored. A native sync block is written. New home nanoflow keyword.
  • check --references accepts System.Images icons from describe's output.
  • Catalog schema 21.

View-entity OQL checks (ako#984)

  • New errors MDL033–036 for what mxbuild rejects (CE0174) or what fails only at runtime: a comparison as a select column, aggregating a column a GROUP BY expression uses, an ungrouped column, and a select expression that matches no GROUP BY expression (PostgreSQL 42803 / HSQLDB 42574).
  • New MDL037 warning for a literal inside an aggregate, and MDL038 info for a bare literal column. Both fail or silently concatenate on HSQLDB, Studio Pro's default database (1 + 1 = 11).
  • String concatenation is typed String(200). A declared AutoNumber over an AutoNumber column is refused under mdl 1.
  • check --references now honours the script's mdl 1; header.

Vega skill and admin port (ako#983)

  • The Vega charts skill builds JSON numbers with toString(round(x, 2)) instead of locale-dependent formatDecimal, which gives 12,5 for a Dutch user. New MDL-JSONNUM01 info rule for it.
  • mxcli oql and mxcli log read the admin port from a running run --local loop

ako and others added 21 commits October 4, 2026 18:52
formatDecimal(x, '0.00') follows the user's language, so a Dutch user got
12,50 and invalid JSON. Use toString(round(x, 2)), or formatDecimal with a
hyphenated locale; explain the silently-ignored underscore tag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…json (#982)

The run --local hint 'mxcli oql -p …' failed on a non-default --admin-port
(cannot connect … localhost:8090), and mxcli log did the same. Both now take
the port and password from a live .mxcli/run-local.json for any flag not given.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ilt JSON (#982)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#980)

describe navigation printed a nanoflow / open-link / create-object menu
item with no OnClick, and exec of that description stored Forms$NoAction:
TestApp's 'Item 4' lost its nanoflow call at exit 0. The reader now keeps
each item's stored action bytes; create or modify navigation and create or
modify menu pair script items with stored ones by caption path and carry a
stored action describe cannot print when the item states none, reporting
each carried action. Describe flags such an action with a comment.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…refuses

MDL033 comparison as a select column (CE0174), MDL034 aggregate over a
grouped column (CE0174), MDL035 plain column not grouped (CE0174),
MDL036 non-aggregated expression not in the GROUP BY (passes mxbuild,
PostgreSQL 42803 / HSQLDB 42574 at runtime) - errors in ValidateOQLSyntax.
MDL037 literal aggregate argument (HSQLDB 42567, warning) and MDL038 bare
integer/string literal column (info) in ValidateOQLPortability, which only
check and the LSP run. Part of #981.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
String concatenation (r.Name + ' x') is a derived String(200) in mxbuild;
string / string(100) declarations are CE6770 and now MDL031. A view
attribute declared autonumber over an AutoNumber column (CE6770) is
refused under mdl 1 and warns MDL-V1-VIEWAUTONUMBER without the header
(ADR-0011); check's reference tier now runs under the script's language
version. Part of #981.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
write-oql-queries: a view entity has no ID (count a non-null column), the
GROUP BY / comparison / HSQLDB literal table, String(200) concatenation,
AutoNumber -> Long.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
sum(0.0) and sum(1.5) fail on HSQLDB with 42567 like the integer forms;
only a decimal select COLUMN is cast by Mendix (MDL038 still skips it).
avg(1) runs on HSQLDB and stays unflagged. Part of #981.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nt (#980)

Studio Pro lays an offline sync constraint out over several lines; describe
prints it on one and the rewrite stored that text, so every describe -> exec
of an offline profile (TestApp's TabletOffline) rewrote the navigation
document. A constraint equal to the stored one apart from whitespace outside
string literals now keeps the stored text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Model a menu item's action the way #959 did for navigation-list items:

- reader keeps the stored action document; describe renders it with
  renderClientActionMDL (call nanoflow, open link, create object, settings);
- OnClick takes actionExprV3 (additive: the three old forms are among its
  alternatives); the visitor refuses kinds a menu item cannot carry;
- exec builds the action with the page builder and writes it with the
  widget client-action serializer, for navigation and menu documents.

The serializer now matches Studio Pro on the shapes it missed: OutputMappings
on Forms$CallNanoflowClientAction, DisabledDuringExecution on a menu item's
Forms$NoAction, and a menu item's AlternativeText and empty Items. What MDL
cannot spell (title override, link type, pages to close) is flagged and kept
while the built action is otherwise equal to the stored one.

Navigation profiles join the TestApp/PedApp round-trip harness; Atlas_Core's
Phone_Menu / Tablet_Menu and one page are struck from the allowlists. The MCP
backend refuses a menu action it cannot write.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…980)

describe navigation prints TestApp's sign-out item as
`Icon: image System.Images.Save`, and check --references refused it as an
unknown image collection, so the description only re-ran with --no-check.
The System module is the platform's and no project stores its collections;
a reference into one is left to mxbuild.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#980)

The native profile writer applied home pages only, and exec reported
"updated" while dropping a menu block (the bottom bar), login and not-found
pages and on sync error; those are refused now, and the sync block is
written. A native nanoflow home gets its own keyword, `home nanoflow`
(additive; `home microflow` on a native profile still runs, with a
warning). The reader takes a bottom bar item's action and icon, and describe
lists the bar as comments so its output re-runs. Catalog schema 21.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…mits (#980)

The navigation syntax help, the manage-navigation skill, the docs-site
navigation and menu references and the quick reference describe OnClick as a
button's action expression with its settings, the kinds a menu item refuses,
what describe flags and a rewrite keeps, home nanoflow, and what mxcli does
and does not write for a native profile. The native example no longer shows
a menu block, which is now refused. Adds bug-test 980.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fix #982: locale-independent JSON numbers in Vega skill; oql/log read run --local admin port
fix(check): view-entity OQL checks for CE0174/CE6770, runtime GROUP BY errors and HSQLDB literals (#981)
fix(navigation): every menu item action round-trips; native profiles refuse what they cannot write (#980)
@ako
ako merged commit 0c21d62 into mendixlabs:main Oct 4, 2026
15 checks passed
ako added a commit to ako/mxcli that referenced this pull request Oct 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant