Skip to content

Sync ako/mxcli: check false-positive fixes, date picker format, fix hashes, watch supervisor - #1295

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

ako merged 28 commits into
mendixlabs:mainfrom
ako:main

Conversation

@ako

@ako ako commented Oct 4, 2026

Copy link
Copy Markdown
Collaborator

Syncs ako/mxcli:main into mendixlabs/mxcli:main: 17 commits since #1293, landed in the fork through PRs ako#973–#979.

Check: fewer false refusals, earlier predictions (ako#969)

  • E001/E002 fire only for literals in value position. A literal compared with a String, passed to a function or used in an if-condition inside an enumeration-slot expression was reported as the enum value, so exec refused valid microflows.
  • Check type-checks against enumerations and attributes the script itself creates, and alter page … set may name a flow or page the script creates.
  • MDL-ASSOCDS01 predicts CE8812 for a list view, data grid or gallery over a single-object association. Measured on mxbuild 11.13.0 and 11.14.0.
  • An info hint is shown for a quoted template parameter that reads like an expression.
  • MPR006 is now an info note: an empty container builds and renders, as measured with run --local and a headless browser on 11.13.0.

Pages

Working outside Studio Pro (ako#972)

  • mxcli fix hashes verifies the MPR v2 ContentsHash index against the .mxunit files, and --repair fixes mismatches in one transaction. exec and docker check warn when the index disagrees.
  • Warnings for git states that crash Studio Pro 11.13 on open (no upstream branch, dubious ownership) in docker check, run --local and diag -p. They are never fatal; MXCLI_NO_GIT_WARNINGS=1 silences them.

Theme & translations (ako#970)

  • theme create --from with a base-only design leaves the alternate variant's mixin as shipped, instead of writing a light palette into the dark one.
  • create translations warns with a per-module count when it writes into Marketplace modules. The new clause without marketplace keeps it out of them.

run --local --watch (ako#971)

  • The web client bundler is supervised: an exited bundler is restarted with backoff, a failed incremental rebuild is retried once, and a recovery re-bundle replaces the bundler instead of running beside it. The timeout is configurable (--web-client-timeout).
  • An edit made while a change is being applied is no longer folded into the baseline and lost.

Docs

  • Syntax, skill, quick reference, changelog and findings are updated for the above

ako and others added 28 commits October 4, 2026 14:40
A literal compared with a String, passed to a function or used in an
if-condition inside an enumeration-slot expression was reported as the
value assigned to the enumeration, so exec refused valid microflows.

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

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…bject association (#969)

Measured on mxbuild 11.13.0 and 11.14.0: a list view, data grid or gallery
over a Reference followed from its FROM entity, or over a Reference with
owner Both from either end, is CE8812. ReferenceSets and the reverse of a
default Reference build clean.

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

Compares every Unit.ContentsHash with base64(SHA-256) of its .mxunit and
reports mismatches, missing files and orphan files; --repair rewrites the
mismatched hashes in one transaction under the writer's Studio Pro guard.
exec and docker check warn when the index disagrees (~0.2 s on 900 units).

Part of #972 (item 1).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Studio Pro 11.13 fails with "Unable to find 'system' property in 'system'"
when the branch has no upstream or git reports dubious ownership. docker
check, run --local and diag -p now warn with the remedy. Never fatal;
silent outside a repo, on a detached HEAD, under CI or with
MXCLI_NO_GIT_WARNINGS=1.

Part of #972 (item 3).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Part of #972.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e an expression (#969)

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

Measured on Mendix 11.13.0 (React client) with run --local and a headless
browser: a bare and a styled empty container render, the widgets after
them are present, no console errors. The crash claim had no evidence.

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

theme create --from wrote a design's base palette into the base theme's
alt-variant mixin, so a light ground and ink landed in a dark palette
whose other surfaces stayed dark. Without a block for that variant the
mixin is now left as the base ships it and create prints a note.

Also: applyTokens matched the indent with \s*, which under (?m) swallowed
the preceding newline, putting the first token on the @mixin line.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ace' (#970)

An unscoped create translations reaches the whole project, Marketplace
modules (and their Atlas templates/building blocks) included; a module
update replaces those. The default is kept (ADR-0011: what a committed
script writes does not change in place). The run now warns with a
per-module count, and the additive clause 'without marketplace' (create
and describe) keeps the run out of Marketplace modules and reports the
entries it left alone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
watchAndApply held a bare *WebClientWatcher. A bundler that exited was never
restarted, so every later page change failed with "watcher exited"; a failed
incremental build (ENOTDIR on web/pages mid-rewrite, measured on 11.13 after
adding an entity) dropped the change and the next one too; and
ensureClientServed's recovery ran a one-shot production bundle in the same
web/ directory while the watcher was still running.

bundlerSupervisor now owns the bundler: EnsureAlive restarts an exited one
with backoff, AwaitRebuild retries a failed incremental rebuild once with a
fresh bundler, and a recovery re-bundle replaces the bundler (stop and reap,
then start) instead of running beside it. The bundle-build limit is
configurable (--web-client-timeout, MXCLI_WEB_CLIENT_TIMEOUT) and a timeout
prints the tail of web-client-build.log. A change that restarts the runtime
says that browser sessions were dropped.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
After each apply watchAndApply moved its change baseline to the source's
current mtime, so an exec or save that landed during the build was folded
into the baseline and never rebuilt. Keep the baseline at the mtime the build
settled on; the build writes nothing under the watched source.

Found while reproducing #971.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A date picker's DateFormat / CustomDateFormat passed check, was stored as
the default Date, and was never described, so describe -> exec turned a
Studio Pro date-time picker into a date-only one (mendixlabs#1263).
The builder now reads them into the picker's FormattingInfo, the writer
stores it, describe prints non-default values, alter page set changes them,
and check refuses an unknown value, a pattern with no DateFormat and Custom
with no pattern (mxbuild CE0493) as MDL-WIDGET18. A text box's
DecimalPrecision / GroupDigits had the same drop and is fixed with it.

The unknown-property exemption for the dynamic-text format keys now applies
to dynamictext only, and a dynamic-text parameter's customDateFormat beside
an explicit non-Custom dateFormat (stored by Studio Pro) is accepted.

Closes #968

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…and quick reference (#968)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-dark' into c25-974

# Conflicts:
#	CHANGELOG.md
# Conflicts:
#	CHANGELOG.md
#	mdl/executor/validate_widgets.go
fix(run-local): supervise the --watch web client bundler (#971)
mxcli fix hashes + git-state warnings for Studio Pro (#972 items 1, 3)
Translations: warn on Marketplace writes + 'without marketplace'; theme create: leave an undeclared variant alone (#970)
fix: write, describe and alter a date picker's DateFormat (#968)
check: fix #969 gaps (E001 value position, script-created SET targets, CE8812, MPR006, quoted params)
Sync mendixlabs/mxcli: Mendix 11.15.0 in the nightly matrix (mendixlabs#1293) and the mendixlabs#1283 merge commit
@ako
ako merged commit ffe28a5 into mendixlabs:main Oct 4, 2026
15 checks passed
ako added a commit to ako/mxcli that referenced this pull request Oct 4, 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