Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
b1bae4d
fix(microflow): keep @excluded on activities (mendixlabs/mxcli#1328)
claude Oct 7, 2026
64127f3
fix(visitor): syntax error, not a panic, for a non-string REST proper…
claude Oct 7, 2026
ca96901
fix(check): MDL-BUTTON02 covers data sources and widget expressions
claude Oct 7, 2026
0509b8b
fix(structure): annotate pages with their data widgets at depth 2 and 3
ako Oct 7, 2026
12cf5f2
fix(lint): CONV011 / MDL-PERF01 count create/change with commit in a …
claude Oct 7, 2026
3bea0d6
fix(exprcheck): accept the parse functions' default-value argument (#…
claude Oct 7, 2026
b0c9135
fix: ALTER PAGE can add a tab page to an existing tab container (mend…
claude Oct 7, 2026
2390a21
Merge remote-tracking branch 'origin/main' into claude/mxcli-issue-13…
claude Oct 7, 2026
46b6cac
fix(check): --references resolves entity types in flow and page signa…
ako Oct 7, 2026
eb25548
Merge pull request #1015 from ako/claude/mxcli-issue-1328-3oaahz
ako Oct 7, 2026
60a552e
Merge pull request #1016 from ako/fix/structure-depth3-widget-query
ako Oct 7, 2026
3a797e3
fix(exprcheck): currentDateTime() is not a Mendix function — point MD…
claude Oct 7, 2026
dc60904
docs(proposal): authentication on a published REST service
claude Oct 7, 2026
84f002d
Merge pull request #1017 from ako/claude/pensive-curie-9rxtiu
ako Oct 7, 2026
545dffc
Merge remote-tracking branch 'origin/main' into fix/1324-own-dataview…
claude Oct 7, 2026
ac25cb1
feat(rest): authentication on a published REST service
claude Oct 7, 2026
db0c13e
Merge pull request #1018 from ako/fix/1324-own-dataview-name-ce0117
ako Oct 7, 2026
5c38417
Merge pull request #1019 from ako/claude/keen-hamilton-9crw5t
ako Oct 7, 2026
43c11c4
Merge remote-tracking branch 'origin/main' into claude/published-rest…
claude Oct 7, 2026
8835cf3
Merge remote-tracking branch 'origin/main' into claude/blissful-hawki…
claude Oct 7, 2026
353ac40
Merge branch 'mendixlabs:main' into main
ako Oct 7, 2026
3d8a2ad
Merge pull request #1022 from ako/claude/blissful-hawking-4qfg7j
ako Oct 7, 2026
e11cb60
Merge pull request #1024 from ako/claude/mxcli-issue-1331-gf4ryt
ako Oct 7, 2026
ef0c874
Merge origin/main into fix/check-unknown-association-target
ako Oct 7, 2026
f6ff400
Merge pull request #1026 from ako/claude/published-rest-authentication
ako Oct 7, 2026
4775c81
Merge pull request #1020 from ako/fix/check-unknown-association-target
ako Oct 7, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude/commands/mendix/lint.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ mxcli lint -p app.mpr --exclude System --exclude Administration
| SEC001 | security | NoEntityAccessRules - Persistent entities need access rules |
| SEC002 | security | WeakPasswordPolicy - Password minimum length should be 8+ |
| SEC003 | security | DemoUsersActive - Demo users should be off at Production security |
| CONV011 | performance | NoCommitInLoop - Commit actions inside loops cause N+1 issues |
| CONV011 | performance | NoCommitInLoop - Commits inside loops (commit actions, or create/change with commit) cause N+1 issues |
| CONV012 | quality | ExclusiveSplitCaption - Exclusive splits need meaningful captions |
| CONV013 | quality | ErrorHandlingOnCalls - External calls (REST/WS/Java) need custom error handling |
| CONV014 | quality | NoContinueErrorHandling - Don't silently swallow errors with Continue |
Expand Down
1 change: 1 addition & 0 deletions .claude/skills/fix-issue/findings/mdl-backend.jsonl
Original file line number Diff line number Diff line change
Expand Up @@ -172,3 +172,4 @@
{"area": "mdl/backend", "date": "2026-10-06", "symptom": "`describe microflow` prints `-- Unsupported action: Microflows$SendEmailAction` for the Studio Pro 11.13+ Send Email activity, and MDL has no statement to create it", "cause": "No reader case, and no grammar/AST/builder/writer. The vendored gen type `genMf.SendEmailAction`/`EmailMessage` predates 11.12: it binds Subject/MessageBody* as expressions, but 11.13 deleted those and stores SubjectTemplate/MessageBodyPlainTextTemplate/MessageBodyHtmlTemplate (Microflows$StringTemplate) plus a CustomHeaders list the gen type has no field for", "file": "mdl/backend/modelsdk/microflow_send_email.go", "insight": "The gen type existing (the issue cited it as 'the storage side seems known') was a false lead: it is the pre-11.12 shape, so both directions are raw-keyed against a Studio Pro-saved document (ako/TestApp Email.EmailMF) and a key-for-key shape test (TestSendEmailActionToGen_MatchesStudioProShape) pins types and markers — it caught ConnectionTimeout being int64 and the empty CustomHeaders list needing marker 3. Version facts come from mendixmodelsdk 4.116 StructureVersionInfo (templates 11.12.0, plain Subject deleted 11.13.0), hence the 11.13.0 gate. Run negative controls through mxbuild before writing check rules: of the plausible rules, 'check server identity needs SSL' and the header-name rule are ACCEPTED by mxbuild 11.15.0-rc.4 (so warnings), while type faults are CE9528 for address/host/port/user (not the CE0117 exprcheck's E009 used to name — slots can now carry their own Mxbuild code). Attachment is a bare variable name (CE0109 on a wrong one). Shapes MDL cannot restate (auth document, pre-11.13 expression subject, non-SMTP) stay UnsupportedAction. Studio Pro's Test Email tab (TestEmailMessage) is written empty on rewrite, by design. An unedited describe->exec round trip is elided as Unchanged, so it cannot demonstrate loss; author-from-script is the meaningful control (old binary: `mismatched input 'email' expecting REST`).", "refs": ["mendixlabs/mxcli#1315"], "ce": ["CE9528", "CE0117", "CE0720", "CE0109"], "rules": ["MDL-EMAIL01", "MDL-EMAIL02", "MDL-EMAIL03", "E009"]}
{"area": "mdl/backend", "date": "2026-10-07", "symptom": "After `RENAME JAVA ACTION M.JA_Old TO JA_New` (or `mxcli rename java-action`), javasource/m/actions/JA_New.java still declares `public class JA_Old`, its constructor `public JA_Old(` and toString `return \"JA_Old\";` \u2014 javac: `class JA_Old is public, should be declared in a file named JA_Old.java`. `mxcli docker build` reports BUILD SUCCEEDED regardless", "cause": "Backend.RenameJavaSourceFile (mdl/backend/modelsdk/java_write.go) only os.Rename'd the file; nothing rewrote the generated parts that carry the action's name", "file": "mdl/backend/modelsdk/java_write.go, sdk/javaactions/rename.go", "insight": "A green mxbuild does NOT prove the javasource on disk compiles: mxbuild regenerates action stubs in the copy it builds (class, constructor, toString follow the model; user code, extra code and the import list are kept byte-for-byte, a mention of the old name inside them included), so the defect only shows where the on-disk file is compiled directly \u2014 `run --local --watch` hot reload, IDEs. The cheap probe is javac on the one file with runtime/bundles/com.mendix.public-api.jar on the classpath. The oracle for the rewrite is mxbuild itself: run the mxbuild binary on the project IN PLACE (not `docker build`, which uses a temp copy) and diff the javasource file \u2014 it changed exactly three lines; that pair is now testdata/mxbuild/JA_Renamed*. Rewrite those three spots, not a full GenerateSource, which would reformat a Studio Pro-authored file. Control: unfixed binary \u2192 javac error above; fixed \u2192 javac exit 0, docker build BUILD SUCCEEDED", "refs": ["follow-up to mendixlabs/mxcli#1318"]}
{"area": "mdl/backend", "date": "2026-10-06", "symptom": "Opening a change in Studio Pro's Changes panel throws `System.InvalidOperationException: Objects with ID … of type Forms$MicroflowParameterMapping do not have the same properties. baseNames = Expression, Parameter, Variable; newNames = Parameter, Expression` after `alter page … set ('onClickAction': call microflow M.F(P = $P)) on w`. `mx check` is 0 errors; the page opens. Second, silent half: `$P` (a page parameter) is stored as the Expression \"$P\", which Studio Pro does not bind (CE1571, the #1140 form)", "cause": "(1) `bindParameterMappingValue` sets only Expression for an Expression-bound argument; the gen `Variable` Part stays unset and the encoder omits an unset Part on a new element, so the key vanished. Studio Pro writes all three keys, nulling the unused slot, and its merge library compares key sets per $ID — the canon $ID carry makes the new mapping the SAME object as the stored one, so the diff sees two shapes of one element. (2) `convertASTAction` (ALTER PAGE SET Action and named action slots) built its pageBuilder with no paramScope/localVariables, so `classifyFlowArgValue` could not recognise a page/snippet parameter", "file": "`mdl/backend/modelsdk/widget_write.go` (RegisterTypeDefaults NullFields Variable on Forms$MicroflowParameterMapping + Forms$NanoflowParameterMapping), `mdl/executor/cmd_alter_page.go` (convertASTAction seeds ParamScope, storedPageVariables, isSnippet from the mutator)", "insight": "**`mx diff base.mpr new.mpr out.mpr` reproduces Changes-panel crashes headless** — it runs the same MergeLib DifferenceComputer and prints the identical \"do not have the same properties\" line (exit 129). Base = a copy of the project before the write, made by the FIXED build so it has Studio Pro's key set. That turns a Windows-GUI-only symptom into a two-binary A/B on Linux. **The base must share the $ID** — the crash needs a paired object, which the identity carry supplies; a fresh element is only an add and never trips it, so a create-only repro passes on broken code. **Register the null slot, don't set it at the call site**: `Part.Set(nil)` still encodes as omitted, and there are three construction sites (action, nanoflow action, nanoflow data source) — NullFields covers all and any future one. **A builder constructed outside CREATE PAGE is the recurring hole for #1140-style classification**: INSERT/REPLACE already seeded the scope from the mutator, SET did not; grep for `&pageBuilder{` and check each seeds paramScope + localVariables + isSnippet. Measured on mxbuild 11.12.2: buggy mx diff exit 129 with the reported line, fixed exit 0; mx check 0 errors on both", "refs": ["mendixlabs/mxcli#1317", "mendixlabs/mxcli#1180", "mendixlabs/mxcli#1140"], "ce": ["CE1571"]}
{"area": "mdl/backend", "symptom": "alter page … { insert after tpOne { tabpage tpTwo … } } and insert into tabsMain { tabpage … } both fail: `failed to insert: failed to build widgets: failed to build widget tpTwo: tabpage must be a direct child of tabcontainer`; the only route to add a tab was rewriting the page with create or modify", "cause": "applyInsertWidgetMutator built each inserted node with buildWidgetV3, which refuses a lone tabpage (it is only built as a tabcontainer child); and even past the builder, InsertWidget refuses tab-page siblings by design (refuseTabPageSiblingEdit) because a Forms$TabPage is not a widget and lives in the control's TabPages list", "file": "mdl/executor/cmd_alter_page.go (applyInsertWidgetMutator, buildTabPagesFromAST); mdl/backend/pagemutator/tabpages.go (InsertTabPages)", "insight": "A non-widget child (list view template, DataGrid2 column, tab page) needs its own PageMutator method, not a relaxed check in InsertWidget: route by the node type in the executor before the generic builder runs, and let the mutator decide by the TARGET's $Type whether INTO (the container) or BEFORE/AFTER (a sibling of the same kind) is meant. Serialize by wrapping the new pages in a throwaway container and taking its child list back out — no new Deps method, and the shape is exactly CREATE PAGE's. Control that makes `mx check` meaningful: a Forms$TabPage placed in a tab page's Widgets makes mx unable to load the project (\"TabPage does not contain a constructor with a parameter of type TabPage\"), while the TabPages splice checks 0 errors on 11.14.0. Keep the control's DefaultPagePointer on insert; set it only when the control had no pages.", "refs": ["mendixlabs/mxcli#1215"], "date": "2026-10-07"}
Loading
Loading