Add Mendix 11.13 to CI, fix the drift it exposed, and pin every version to its latest patch - #821
Merged
Conversation
…posed
Adding '11.13.0' to the matrix on its own would have shipped a red nightly:
11.13 replaced the integer QueryType on DatabaseConnector$DatabaseQuery with
a `Type` string enum ("Select" / "NonSelect" / "Unknown"), and ships a
one-time conversion (ExternalDatabaseConnectionQueryTypeConversion) for older
documents. mxcli wrote the legacy integer unconditionally, so on 11.13 the
new property was simply absent — and an absent `Type` reads as Unknown:
[error] [CE5277] "Please re-run and save the query to fix the error"
at Execute database query action activity 'Query external database'
once per activity, on both engines. The queries themselves report nothing,
so it reads like a microflow defect.
mdl/dbconnector decides the spelling from the project's Mendix version and
writes exactly one of them. Writing both is not a safe hedge: a property the
target's metamodel does not define is the shape Studio Pro fails to resolve
on open. The read side accepts either, or the next ALTER of an 11.13 project
would write Unknown straight back.
mxcli never connects to the database, so it cannot derive the type the way
Studio Pro does (running the query and inspecting the result set). It reads
the leading SQL keyword instead — still better than Mendix's own converter,
which marks every migrated query Select regardless of statement. A value
already stored outranks the heuristic, so a round-trip preserves what Studio
Pro derived.
Verified with mx check on real projects: 11.13.0 given the doctype corpus is
clean on both engines (a pre-fix binary reproduces CE5277 exactly); 11.12.2,
11.6.6 and 10.24 still store the legacy integer and still pass. Full
integration suite green against 11.13.
Found but NOT fixed, and documented as such: 11.13 also added CE5278 ("The
<db> JDBC driver is missing from the module settings"), a check on the
module's Java dependencies rather than on anything mxcli writes. mxcli has no
way to author module settings. It does not affect the nightly, whose harness
imports the connector mpk.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012XR649rKk68z6gBpngu6MA
The nightly matrix and push-test had drifted several patches behind:
nightly 10.24.19.104498 -> 10.24.24.119349
11.6.6 -> 11.6.8
11.12.0 -> 11.12.2
push-test 11.9.0 -> 11.12.2
11.9 was two minors behind the nightly's newest 11.x, so the fast
single-version gate on every push was validating against a Mendix nobody
was targeting. It now matches a version the nightly also covers.
Versions confirmed latest by listing the CDN bucket rather than probing
names — https://cdn.mendix.com/?list-type=2&prefix=runtime/mxbuild-<minor>.
That matters for 10.x, whose tarballs carry a build number that cannot be
guessed from the release notes (10.24.24.119349).
Each bump ran the full executor integration suite (doctype corpus + mx
check, both engines) against the new binary before landing. A patch bump is
not automatically safe: 11.13 shipped a renamed metamodel property in a
minor, and the same class of change can land in a patch.
10.24.24.119349 ok 931s 0 failures
11.6.8 ok 1198s 0 failures
11.12.2 ok 1117s 0 failures
11.13.0 ok 1142s 0 failures (full ./... run)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012XR649rKk68z6gBpngu6MA
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.
Follow-up to the sync merged as #820. Two commits.
Mendix 11.13 support — and the drift adding it exposed
Running the doctype corpus against 11.13 before touching the nightly matrix turned up one failure, on both engines:
11.13 replaced the integer
QueryTypeonDatabaseConnector$DatabaseQuerywith aTypestring enum (Select/NonSelect/Unknown), shipping a one-time conversion (ExternalDatabaseConnectionQueryTypeConversion) for older documents. mxcli wrote the legacy integer unconditionally, so on 11.13 the new property was simply absent — and an absentTypereads as Unknown. The queries themselves report nothing; the error lands on every activity pointing at them, so it presents as a microflow defect.Finding the target shape without guessing — run the new mxbuild's own migration over an old project and diff the BSON:
mx convert -p -s /path/to/11.12-project # with the 11.13 mx binaryMendix ships a conversion per renamed property, so the converted document is authoritative. That is what showed
QueryType: 1→Type: "Select". It is the non-widget counterpart of the "Studio Pro Update Widget" diff, and needs no Studio Pro.New
mdl/dbconnectorpicks the spelling from the project's Mendix version and writes exactly one. Writing both is not a safe hedge — a property the target's metamodel does not define is the #759 Studio-Pro-won't-open shape. The read side accepts either, or the next ALTER of an 11.13 project writes Unknown straight back over it.mxcli never connects to a database, so it cannot derive the type the way Studio Pro does (running the query and inspecting the result set). It reads the leading SQL keyword instead — still better than Mendix's own converter, which marks every migrated query
Selectregardless of statement. A value already stored outranks the heuristic, so a round-trip preserves what Studio Pro derived. This is the one judgment call in the diff: aSELECT-returning stored procedure invoked viaEXECgets markedNonSelectuntil someone re-runs it in Studio Pro — which is what CE5277's message asks for anyway.Mutation-checked: stubbing the version predicate to
falsefails the 11.13 case and passes the 11.6 one, so the test proves the version reaches the writer rather than only that the mapping is right.Found but deliberately NOT fixed: 11.13 also added CE5278 ("The PostgreSQL/MSSQL JDBC driver is missing from the module settings"), a check on the module's Java dependencies rather than on anything mxcli writes. mxcli has no way to author module settings. It never fires in the nightly, whose harness imports the connector mpk. Documented in the bug-test fixture and the onboarding doc so it isn't re-diagnosed as this bug.
Every Mendix version in CI pinned to its latest patch
push-testwas two minors behind the nightly's newest 11.x, so the fast per-push gate was validating against a Mendix nobody targets. It now matches a version the nightly also covers, making push-test a strict subset of the nightly.Latest patches confirmed by listing the CDN bucket, not by probing tarball names:
https://cdn.mendix.com/?list-type=2&prefix=runtime/mxbuild-10.24.— which matters for 10.x, whose tarballs carry a build number that cannot be guessed from the release notes. It also surfaced10.24.24(published 2026-07-31), one patch beyond the newest version listed on the 10.24 release-notes page.Each bump ran the full executor integration suite against the new binary before landing, because a patch bump is not automatically safe — 11.13 shipped a renamed metamodel property in a minor, and nothing confines that to minors:
./...)Also included
Repro fixture
mdl-examples/bug-tests/1113-database-query-type-enum.mdl, a symptom-table row, a "11.13 onboarding" section inWIDGET_BSON_VERSION_COMPATIBILITY.md(documenting themx convertdiff method and the rule that onboarding a minor starts by running the corpus, not by editing the matrix), and CLAUDE.md's overlay-writes rule extended to the CREATE case — where there is no stored document to read the key off, so you branch on version and never write both