Skip to content

Add Mendix 11.13 to CI, fix the drift it exposed, and pin every version to its latest patch - #84

Merged
ako merged 2 commits into
mainfrom
claude/mendix-1113-nightly
Aug 3, 2026
Merged

Add Mendix 11.13 to CI, fix the drift it exposed, and pin every version to its latest patch#84
ako merged 2 commits into
mainfrom
claude/mendix-1113-nightly

Conversation

@ako

@ako ako commented Aug 3, 2026

Copy link
Copy Markdown
Owner

Two commits. The matrix change is one line; the rest is what it took to make that line ship a green nightly.

1. Mendix 11.13 — and the drift adding it exposed

Running the doctype corpus against 11.13 before touching the matrix turned up one failure, on both engines:

[error] [CE5277] "Please re-run and save the query to fix the error"
  at Execute database query action activity 'Query external database'

11.13 replaced the integer QueryType on DatabaseConnector$DatabaseQuery with a Type string 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 absent Type reads 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 binary

Mendix ships a conversion per renamed property, so the converted document is authoritative. That is what showed QueryType: 1Type: "Select". It's the non-widget counterpart of the "Studio Pro Update Widget" diff, and needs no Studio Pro.

The fix. New mdl/dbconnector picks 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 mendixlabs#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 Select regardless of statement. A value already stored outranks the heuristic, so a round-trip preserves what Studio Pro derived.

Mendix Stored mx check
11.13.0, pre-fix binary QueryType: 1, no Type CE5277 ×4
11.13.0, both engines Type: "Select" / "NonSelect" clean
11.12.2 / 11.6.6 / 10.24 QueryType: 1, no Type still pass

Mutation-checked: stubbing storesQueryTypeEnum() to false fails the 11.13 case and passes the 11.6 one — so the test proves the version actually reaches the writer, not just that the mapping is correct.

Found but deliberately NOT fixed

11.13 also added CE5278 — "The PostgreSQL/MSSQL JDBC driver is missing from the module settings." It fires on a bare 11.13 project with any DB connection, but never in the nightly, whose harness imports the connector mpk. It is a check on the module's Java dependencies, not on anything mxcli writes, and mxcli has no way to author module settings. Documented in the bug-test fixture and the onboarding doc so it isn't re-diagnosed as this bug.

2. Every Mendix version in CI pinned to its latest patch

nightly     10.24.19.104498 -> 10.24.24.119349
            11.6.6          -> 11.6.8
            11.12.0         -> 11.12.2
            (new)              11.13.0
push-test   11.9.0          -> 11.12.2

push-test was 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 names:

https://cdn.mendix.com/?list-type=2&prefix=runtime/mxbuild-10.24.

That matters for 10.x, whose tarballs carry a build number that cannot be guessed from the release notes. It also surfaced 10.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. A patch bump is not automatically safe: 11.13 shipped a renamed metamodel property in a minor, and nothing about Mendix's versioning confines that to minors.

Version Result
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 ./...)

Also in this PR

  • Repro fixture mdl-examples/bug-tests/1113-database-query-type-enum.mdl and a symptom-table row.
  • A "11.13 onboarding" section in WIDGET_BSON_VERSION_COMPATIBILITY.md documenting the mx convert diff method and the rule that onboarding a minor starts with running the corpus, not with editing the matrix.
  • CLAUDE.md's overlay-writes rule extended to the CREATE case, where there is no stored document to read the key off — branch on version, never write both.

🤖 Generated with Claude Code

https://claude.ai/code/session_012XR649rKk68z6gBpngu6MA


Generated by Claude Code

claude added 2 commits August 2, 2026 20:08
…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
@ako
ako merged commit adbc9c1 into main Aug 3, 2026
3 checks passed
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.

2 participants