Sync: widget tree in the catalog, read-only docker build, commit refs, void-call checks - #1283
Merged
Merged
Conversation
…structure and the catalog (#963) list workflows and show structure recursed over outcome flows only and skipped boundary-event flows and event sub-processes, so TestApp Workflow1 listed 5 activities where the catalog counted 8. The catalog's walk moves to wfnames.WalkActivities/CountActivities and all three use it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…, CE0109) A call to a void Java/JavaScript action keeps its output name and declares nothing (#953), so reading the name is CE0109 "Undefined variable" in mxbuild 11.13.0. check now reports it for microflows and nanoflows when the script or the project says the action is void. The void resolver returns whether it knows the action, so an unresolvable call is never reported. Part of #962 (item 1). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…g create/change (#963) commit $Order on a loop variable wrote no refs row because refs had no commit kind. A commit action, or a create/change with commit Yes/YesWithoutEvents, now emits FLOW -> ENTITY 'commit', resolved through the same intra-flow variable map as change/delete. It stays out of the analysis graph and the caller kinds. The ref_kind skill test now reads every RefKind constant, so a new kind cannot ship undocumented. Catalog schema version 19. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The same output name in each if/else branch, or inside a loop and again after it, is CE0111 in mxbuild 11.13.0. describe only warned when one assignment reached the other, so it treated branches and loop bodies as scopes. Count names over the whole flow instead; void calls stay excluded. The test that pinned branch scoping now asserts the warning. Part of #962 (item 2). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The language server ran the flow rules without a project, so two calls to a stored void action with the same output name were flagged MDL063. It now uses executor.FlowRules: actions resolve through the script and the workspace project, an unresolvable action is treated as possibly void (for MDL063 only, never MDL093), and project answers are cached for 30s between keystrokes because one read costs ~300ms on PedApp. Part of #962 (item 3). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tion widgets_data gains ParentWidgetId (nearest indexed ancestor, so skipped wrappers, layout grid rows/columns, tab pages and pluggable property / object-list items are transparent), Depth (0 at the page or snippet root; a list view template is a level), Class, Style, DynamicClasses, ActionType (raw $Type of Action, else OnClickAction, else ClickAction) and HasConfirmation (ConfirmationInfo on a microflow/nanoflow/workflow call). Catalog schema 19. Tested on hand-built shapes and on Studio Pro-authored TestApp pages. mendixlabs#1268 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…gets() widgets() structs gain parent_widget_id, depth, class_name, style, dynamic_classes, action_type, has_confirmation and page_ref. mendixlabs#1268 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The widget table moves to write-lint-rules/catalog-tables.md (SKILL.md was over the 700-line bound) with an example rule for inline styles, a class allow-list and direct delete buttons. The vocabulary test scopes action_type per section (activity vs widget), holds documented widget action types to codec-registered storage names, and pins that only flow calls carry a ConfirmationInfo. mendixlabs#1268 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ction' into c24-965 # Conflicts: # CHANGELOG.md # mdl/catalog/tables.go
#963's commit refs and mendixlabs#1268's widget columns both bumped 18 -> 19 on parallel branches. A cache built at 19 by either alone would never rebuild for the other, the 15/16 collision again. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The TUI checker (after every change) and the eval runner's mx_check ran a plain `mx check <project>`, which writes theme-cache/web/ and deployment/sass/ into the project. Measured with mx 11.14 on a v1 and a v2 copy of the testapp: the model is left alone, those two folders are added. New docker.MxCheckOnCopy runs `mx check` on copyProjectToTemp's copy (the #956 helper, renamed now that it is not check-only) with output paths rewritten to the project's, and applies PrepareMxCommand, which these two callers lacked. mxCheckCmd takes extra args for the TUI's -j/-w/-d. Part of #961. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tory `docker build` (and docker run / reload, which call it) ran update-widgets on the project under a snapshot that restored only MPRv2 storage, then mx check and MxBuild on the project itself. Measured on the 11.14 testapp: an MPRv1 .mpr was rewritten, every MPRv2 .mxunit was rewritten and put back with new mtimes, and theme-cache/, deployment/, 160 javasource/ proxies, the .launch file, .classpath and .project were written into it. buildOnCopy now runs all three tools on one copyProjectToTemp copy and writes only the PAD output directory (absolute, default .docker/build). MxBuild still sees the widget-normalised model, from the copy. The PAD differs from an in-place build in the same 9 files in which two in-place builds of identical copies differ (cache-bust stamps, operation ids, native metro paths), and the rebuild time is unchanged (58s vs 59s). runUpdateWidgets (the v2 snapshot) has no caller left and is removed with its tests; build_readonly_test.go covers v1 and v2 with stub tools, and TestBuild_LeavesProjectUntouched with real mx and MxBuild. Part of #961. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…c24-966 # Conflicts: # CHANGELOG.md
The layout-grid advice is about Bootstrap label/input columns, which a native page does not have. Measured on mxbuild 11.13.0 (PedApp copy): a bare form DataView on a NativePhone_Default page, or in a native snippet, builds clean, and wrapping it in a layoutgrid as advised is CE6858. lint skips pages on a native layout (LintContext.NativePages, so the rule now declares CatalogFull) and snippets of Type Native; check -p asks the project whether a reported page's layout is native. Part of #962 (item 4). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Without checkCmd.InheritedFlags() the test only saw the project when another test had merged the flags first. Part of #962. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… c24-967 # Conflicts: # CHANGELOG.md
Catalog follow-ups: total_activity_count in Starlark, one workflow walk, commit ref kind (#963)
Catalog: widget parent/depth, class/style and primary action (mendixlabs#1268)
docker build, TUI checker and eval runner no longer write to the project
fix(check,describe,lsp,lint): #962 — CE0109 on void call outputs, flow-wide duplicate warning, LSP void calls, MPR010 on native
AI Code ReviewCritical Issues
Moderate Issues
Minor Issues
What Looks Good
Recommendation Automated review via OpenRouter (Nemotron Super 120B) — workflow source |
ako
added a commit
to ako/mxcli
that referenced
this pull request
Oct 4, 2026
Sync mendixlabs/mxcli: Mendix 11.15.0 in the nightly matrix (mendixlabs#1293) and the mendixlabs#1283 merge commit
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Syncs ako#964–ako#967 (fast-forward; mendixlabs main has nothing ako lacks).
Closes #1268
Widget tree in the catalog and lint API (ako#965, #1268)
widgets()gainsparent_widget_id,depth,class_name,style,dynamic_classes,action_type(raw stored type of the primary action),has_confirmationandpage_ref.Forms$DeleteClientActionhas no confirmation setting in the model, so the enforceable rule is "no button uses the delete action directly". The skill shows an example. Catalog schema 20.Catalog follow-ups (ako#964)
total_activity_counton the microflow struct (loop bodies included).list workflows,show structureand the catalog now agree, including boundary events and event sub-processes.commit(flow → entity) for commit actions and for create/change with commit. Catalog schema 19.No mx path writes to the project (ako#966)
docker build(anddocker run/reload, and the test runner) runs update-widgets, mx check and MxBuild on one temporary copy. Only the PAD output is written..mprwas rewritten, anddeployment/,javasourceproxies,.classpath,.projectandtheme-cache/were written into the project.docker buildno longer refreshes the project's owndeployment/andjavasourceproxies.check / describe / LSP (ako#967)