Skip to content

Releases: mendixlabs/mxcli

v0.16.0

Choose a tag to compare

@ako ako released this 12 Jul 11:47

[0.16.0] - 2026-07-12

Headline: Pluggable chart authoring reaches round-trip fidelity, plus in-place enum-caption editing, named layout placeholders, and a batch of new pre-build check heuristics. Charts gain widget-level datasource attributes, the LINE/SCALECOLOR object-list keywords, and a DESCRIBE that reconstructs them as executable MDL; workflows and widget-less pages now describe cleanly; view-entity OQL is validated before build; and several authoring mistakes are caught at mxcli check time instead of only by MxBuild.

Added

  • Chart authoring expanded — object-lists, scale colours, and DESCRIBE round-trip — building on the v0.15.0 chart-series work: widget-level datasource attributes for PieChart/HeatMap (item 1b), the LINE and SCALECOLOR object-list keywords, and a DESCRIBE that reconstructs pluggable-widget object-lists (series / line / scalecolor) as executable MDL, so an existing chart's syntax can be learned by describing it. Validated LineChart / HeatMap / TimeSeries / BubbleChart examples now run in the regular check-mdl suite.
  • ALTER ENUMERATION … MODIFY VALUE <name> CAPTION '…' — edit an enumeration value's caption in place, without dropping and recreating the value.
  • Assign widgets to named layout placeholders (#532) — a widget can be placed into a layout's named placeholder, not only the default content slot.
  • New authoring-time check heuristics — caught at mxcli check, before a build round-trip:
    • MDL043 — rejects an object/list-typed declare where a primitive variable is required.
    • MDL032 — warns on a reserved OQL word used as a view-entity attribute name.
    • a derived-string view entity that MxBuild rejects with CE6770 is now caught pre-build (reviving the OQL type-checker it depends on).
  • Workflow authoring skill (Bug 11a) — added .claude/skills/mendix/write-workflows.md (synced to user projects and CLAUDE.md's "read first" list) documenting CREATE / DROP / ALTER WORKFLOW: the activity grammar (user task, multi-user task, decision, parallel split, jump, wait-for-timer/notification, boundary events), header options, and the two first-attempt gotchas (PARAMETER $var: Entity, body closes with END WORKFLOW). Workflow authoring already worked and built, but no skill documented it, so it read as read-only.
  • DynamicClasses documented across the styling surfaces — the runtime-computed CSS-class property (a sibling of Class/Style) was wired and skill-documented but missing from every reference enumeration that lists its siblings. Added it to the mxcli syntax page.styling topic, MDL_QUICK_REFERENCE.md (styling table + ALTER PAGE SET properties), and the docs-site pages (quick-reference, create-page, widget-types, alter-page). Also demonstrated end-to-end in the 12-styling doctype example (create-time, bulk UPDATE WIDGETS, and ALTER PAGE ... SET DynamicClasses ON <container>).

Fixed

  • DESCRIBE PAGE/DESCRIBE SNIPPET of a widget-less page/snippet now re-parses (#626) — an empty page described as create page … ( … ) with no { } body block, which the CREATE PAGE grammar rejects, so the DESCRIBE output failed to round-trip through mxcli check. Empty pages and snippets now emit an empty { } body. Added an integration test (TestRoundtripPage_DescribeReparses) that actually re-parses DESCRIBE output (not just substring assertions); a full describe→check pass over the 57 03-page-examples pages is clean.
  • DESCRIBE WORKFLOW round-trips all activities as executable MDL (Bug 11b) — on the default modelsdk engine, jump-to, wait-for-timer, and wait-for-notification activities (and the implicit start/end) decoded to GenericWorkflowActivity and rendered as non-executable -- [Workflows$…] comments, so describe → exec dropped them and their syntax couldn't be learned by describing an existing workflow. The reader now reconstructs these as typed activities (reading the jump target and timer delay from raw BSON), matching the legacy engine and the describe formatter, which already handled them. Round-trip verified: describe → drop → exec → docker check with zero workflow errors.
  • Containers now appear in the widget catalogshow widgets, update widgets, and CATALOG.widgets queries dropped every container (Forms$DivContainer / Pages$DivContainer), so a WHERE widgettype LIKE '%Container%' filter silently matched nothing and containers couldn't be bulk-styled — even though they carry Class / Style / DynamicClasses / DesignProperties and can be clickable. The catalog now indexes user-authored containers and skips only the synthetic transparent conditionalVisibilityWidget* layout wrapper (matching how DESCRIBE PAGE already unwraps it). Other container types (LayoutGrid, TabContainer, …) were already indexed.
  • Widget action microflow parameter mappings persist (Bug 1) — a widget action's microflow parameter mappings were dropped on write; they are now serialized and round-tripped.
  • Nanoflow client actions on widgets (Bug 2) — the modelsdk engine now writes nanoflow client actions on widgets; previously only microflow actions serialized.
  • HeatMap scale colour persists via the ColorValue alias (Bug 10a class) — a HeatMap's scale colour was not written; it now serializes through the ColorValue object-list alias.
  • ALTER ENTITY … MODIFY ATTRIBUTE constraints and MOVE ENUMERATION folder reads (Bug 12) — the read paths for attribute constraints and an enumeration's folder are corrected so both operations round-trip.
  • View-entity OQL is read from the source document on the modelsdk engine (Mendix 11.x) — so DESCRIBE and validation see the actual query text.
  • ELSIF arms preserved by lowering to nested IfStmt (#746) — microflow expression ELSIF branches were dropped on round-trip; they are now retained.

New Contributors

Full Changelog: v0.15.0...v0.16.0

What's Changed

  • fix(microflows): preserve ELSIF arms by lowering to nested IfStmt (#745) by @mlehane1 in #746

New Contributors

Full Changelog: v0.15.0...v0.16.0

Nightly 2026-07-13

Nightly 2026-07-13 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 Jul 06:07

Nightly build from main — 2026-07-13

Commit: 3907fa3b

Recent changes

3907fa3 docs(changelog): release v0.16.0
1a98683 fix(view-entity): catch derived-string CE6770 pre-build, revive OQL type checker
64bc653 feat(enum): ALTER ENUMERATION MODIFY VALUE X CAPTION '...'
d16f7bf fix(ci): pass nightly release notes via env var, not shell interpolation
cb6d638 docs(skills): retrieve-by-association + Playwright input-event fixes
d937b05 fix(microflows): reject object-typed declare (MDL043)
ae5bc0d test(nanoflow): provision the JS action instead of skipping (#593)
80d7d0f feat(pages): assign widgets to named layout placeholders (issue #532)
8eb30b4 feat(catalog): SHOW / DESCRIBE ICON COLLECTION to discover icon names
4a67a57 docs(pages): document button icon across help, docs, and doctype example (#602)
65e5246 feat(pages): button icon (icon-collection) on action/link buttons (#602)
07d0a64 docs(examples): nanoflow widget-action example + fix stale note (Bug 2)
5b9091c fix(modelsdk): write nanoflow client actions on widgets (Bug 2)
7e44636 fix(pages): persist widget action microflow parameter mappings (Bug 1)
820ada2 fix(describe): emit empty body block so widget-less pages re-parse (#626)
ec74e1e test(pages): regression example for DataGrid2 SELECTION binding (#628)
89c041f fix(microflows): preserve ELSIF arms by lowering to nested IfStmt (#746)
b7d96d8 docs(skills): chart authoring guide + fix stale "charts unsupported" claim
53ab2d2 feat(pages): widget-level datasource attributes for PieChart/HeatMap (item 1b)
422417c fix(examples): valid TimeSeries datetime X + BubbleChart size attribute

This is an automated pre-release build. Use tagged releases for production.

v0.15.0

Choose a tag to compare

@github-actions github-actions released this 10 Jul 06:43

[0.15.0] - 2026-07-10

Headline: A page-authoring fidelity wave on the modelsdk engine, plus MCP pluggable-widget authoring (Phases 1–2), Playwright warm-session reuse, and new check heuristics for widget properties. A batch of numbered page bugs (DataView/DataGrid2/widget serialization and round-trip) are fixed, microflow round-trip gaps (#723) are closed, and several new authoring-time checks catch widget mistakes before they reach MxBuild.

Added

  • REPL filesystem path completion for EXECUTE SCRIPT — pressing Tab while typing the path argument of execute script '<path>' now completes against the filesystem (e.g. execute script "mdl-⇥ → mdl-examples/). Directories complete with a trailing / so you can keep tabbing to descend, hidden entries are offered only when the fragment starts with ., and completion works whether or not a project is connected (you often run a script to connect in the first place). Both single- and double-quoted paths are handled; keyword/object-name completion is unaffected.
  • Author Mendix Charts series via MDL (Bug 9a) — SERIES chart types can now bind their data via MDL; object-list datasource sub-properties work, and the multi-widget docs are corrected.
  • DataGrid2 column binding to an associated attribute (Bug 7) — a DataGrid2 column can now bind to an attribute reached over an association, not just a direct attribute of the grid's entity.
  • MCP pluggable-widget authoring — the experimental MCP/PED backend can now author pluggable widgets against a running Studio Pro: Phase 1 accepts any registry-resolved pluggable widget via the shared .def.json registry; Phase 2 implements the expression, text-template, and action widget ops.
  • Playwright warm-session reuse and lifecycle control — verify runs reuse a warm browser session across invocations, with new open / status / close session-lifecycle subcommands.
  • New authoring-time check heuristics for widgetsMDL-WIDGET07 warns on unrecognized built-in widget properties; MDL-WIDGET08 flags invalid enum values on widget object-list sub-properties and rejects an association datasource on a DataView; MDL-WIDGET09 rejects an invalid DataView database source.

Changed

  • Go toolchain 1.26.4 → 1.26.5 for GO-2026-5856.

Fixed

  • Page / widget serialization on the modelsdk engine — a wave of numbered page bugs:
    • DataGrid2 column properties are now ordered by the widget template, fixing CE0463 on the modelsdk engine (Bug 6).
    • An association attribute is resolved correctly from a subclass context (Bug 3).
    • DataView "data from context over association" is supported, and an invalid association/database DataView source is now refused at both check and exec (Bug 5, MDL-WIDGET09).
    • Widget datasource sort by … desc is persisted and round-tripped by DESCRIBE (Bug 8).
    • DynamicCellClass is persisted and dynamicclasses is lowercased (Bug 10).
    • DynamicText contentparam over an association is persisted.
    • The Visible string/boolean conditional-visibility form and widget DynamicClasses expressions are persisted.
  • MDL parsing — identifier quotes are stripped in expression contexts and in inline-bracket XPath (datasource WHERE).
  • OQL select-clause parser was case-broken and is now case-insensitive (Bug 9b).
  • Microflow round-trip on the modelsdk engine (#723) — execution flags (A1), flow-object box size (A2), and rule-based decisions (IsRule, A4) now read back correctly.
  • docker widget update — the absolute .mpr path is passed to mx update-widgets, fixing a crash that left CE0463 unresolved.
  • MCP verify-on-timeout — Studio Pro's -32000 false failures are re-verified instead of reported as failures.
  • Executor keeps the connection when a script reconnects internally.
  • Dependency bumpgolang.org/x/crypto → v0.52.0.

Full Changelog: v0.14.0...v0.15.0

v0.14.0

Choose a tag to compare

@github-actions github-actions released this 06 Jul 21:19

What's Changed

  • feat(lint): add --rules / -r flag to isolate rule execution by @Andries-Smit in #683
  • feat(lint): add --modules/-m flag to scope lint to specific modules by @Andries-Smit in #684
  • feat(lint): expose constants() query function to Starlark lint rules by @Andries-Smit in #685
  • docs(microflows): add batch-commit-after-loop performance pattern by @daming-bbc in #694
  • feat(lint): expose scheduled_events() query function in Starlark rules by @Andries-Smit in #692
  • fix(lint): respect lint-config.yaml in mxcli lint CLI and options in Starlark rules by @Andries-Smit in #700
  • ci: bump actions/cache from 5 to 6 by @dependabot[bot] in #707
  • feat(lint): expose XPath/expression AST to Starlark rules by @Andries-Smit in #688
  • fix: convert UUID to GUID blob in GetRawUnit for v1 MPRs by @densmoe in #711

New Contributors

Full Changelog: v0.13.0...v0.14.0

v0.13.0

Choose a tag to compare

@github-actions github-actions released this 20 Jun 10:45

[0.13.0] - 2026-06-20

Headline: the roundtrip codec engine is now the default. Reads and writes route through the new modelsdk codec engine — a Go-native, roundtrip-safe metamodel codec spanning 53 domains — replacing the legacy sdk/mpr write path. Legacy remains available as an explicit --engine legacy (or MXCLI_ENGINE=legacy) fallback for the few constructs the codec can't yet reproduce (e.g. SOAP), and refuses an op rather than dropping data where it can't. This release also lands an experimental MCP/PED backend for authoring against a running Studio Pro.

A big thank-you to engalar. The roundtrip codec engine and the expression type-checker that anchor this release are built on his contributions — his modelsdk codec work (the 53-domain, roundtrip-safe metamodel implementation) and exprcheck port were cherry-picked and adapted here. Much of what makes v0.13.0 possible is his. Thank you!

Added

  • Experimental MCP/PED backend (mxcli mcp) — author Mendix models against a running Studio Pro over the Model Edit Protocol (PED/MCP) transport, instead of writing the .mpr on disk. mxcli mcp capabilities reports what the connected Studio Pro version supports (a version-keyed capability registry), and CREATE/ALTER ops are gated on that model — unsupported constructs are refused with an actionable message rather than silently dropped. Covers entity create/update with NOT NULL / UNIQUE validation rules, ALTER ENTITY ADD ATTRIBUTE, ALTER STYLING design properties, page authoring (typed params, edit-button actions, design properties), folder placement, and business-event/workflow reads. Honoured in both exec and the interactive REPL (--mcp). Verified against Studio Pro 11.11.

  • Graph community detection & centrality (refresh catalog communities) — a pure-Go (no CGO, no deps) graph engine over the refs graph: Leiden community detection, Tarjan cycles, topological layering, PageRank, and betweenness. refresh catalog communities [resolution n] computes them (in the full-refresh transaction) into new catalog tables/views — communities + community_summary, graph_cycles, graph_layers, graph_centrality, graph_integration_surface (cross-community edges → OData/REST/event mechanisms), graph_module_dependencies — and adds PageRank/betweenness columns to graph_god_nodes. Surfaced via SHOW COMMUNITIES / SHOW COMMUNITY [MEMBERS] OF Module.Asset, and exposed to Starlark lint rules (community_of, layer_of, cycles, module_dependencies, centrality, god_nodes, integration_surface, refs_from) so teams validate their own architecture guidelines. The native Leiden matches the leidenalg reference exactly (105 communities on Evora). Targets two refactoring journeys: spaghetti → layered/modular (cycles + layer sequence numbers) and monolith → multi-app (community cut → integration-contract list).

  • mxcli graph-report — architecture map from the dependency graph — renders six analyses over new CATALOG.graph_* views: god nodes (degree centrality), cross-module coupling ("surprise edges"), module cohesion (intra/inter ratio), dead documents (no inbound edge), the reference-kind distribution, and entity hotspots (used by the most flows). Framework/marketplace modules are excluded by default (--include-framework to keep them); --top N, --format markdown|json, -o file. Each section is a thin SELECT over a graph_* view, so it's reproducible directly (select * from CATALOG.graph_god_nodes). Built on the now-substantially-complete refs graph; requires refresh catalog full (the command runs it). Also made CATALOG.<name> query translation generic (regex strip) so new catalog views work without a per-name allowlist.

  • Marketplace download & install — the content API now returns a per-version downloadUrl, so the previously-parked install path is unblocked. mxcli marketplace download <id> [--version X] [-o file] fetches a content version's .mpk (two-step: MxToken-authed 303 on marketplace.mendix.com → public CDN, no token sent to the CDN). mxcli marketplace install <id> -p app.mpr is type-aware: widgets are copied into widgets/, new modules are imported via mx module-import, other types are downloaded with import instructions. Module updates are intentionally reported-not-applied — re-importing an existing module would discard local edits and change persistent-entity IDs (data loss); that path is left to Studio Pro pending an ID-preserving merge

  • Marketplace search caching — the first mxcli marketplace search fetches the full catalog listing once and caches it under ~/.mxcli/marketplace-catalog-<profile>.json (24h TTL, mode 0600); subsequent searches (any keyword) are served from the cache instantly. --refresh bypasses the cache and re-fetches. An interactive progress line ("Searching marketplace… N items scanned") shows during a fresh scan

  • describe auto-detects the document type — the type is now optional for a qualified name: mxcli describe MyModule.Customer resolves the type itself (entity, microflow, page, snippet, enumeration, constant, java action, nanoflow, workflow, association incl. cross-module, …). Resolution prefers the catalog cache (O(1) lookup, no overhead vs. the explicit form) and falls back to a live project scan when the catalog is absent. An ambiguous name (e.g. an entity and a microflow sharing a name) is reported with its candidates. The explicit describe <type> <name> form is unchanged, and is still required for the forms that have no single qualified name (module, settings, navigation, module role)

  • Bare describe Module.Name works as MDL, not just as a CLI flag — the auto-detect form is now part of the MDL grammar, so it parses and runs everywhere MDL does: the REPL, exec scripts, check, and the LSP (previously describe Sales.Order in the REPL was a parse error and only mxcli describe Sales.Order worked). The bare form resolves the type from the project's catalog objects index at execution time (built on demand, fresh — no staleness concern); all typed describe <type> … forms still take precedence, and an ambiguous or unknown name returns an actionable error

  • Pop-up page geometryCREATE PAGE and ALTER PAGE can now set a pop-up page's width, height, and resizable in the page header (#661). DESCRIBE PAGE round-trips them.

  • Compound (nested) design properties — design properties on pages and snippets that nest (a group containing sub-properties) are now written and round-tripped by DESCRIBE PAGE/DESCRIBE STYLING, on both the codec engine and over MCP (#668)

  • Quoted identifiers in member lists and attribute refs — names that collide with MDL reserved words can now be quoted in member lists and attribute references (#675), extending the reserved-word-quoting support to more positions (DESCRIBE emitters now quote reserved-word names in the remaining strict-identifier spots, #619)

Changed

  • The codec engine (modelsdk) is the default; sdk/mpr is the explicit fallback — all reads and writes now route through the roundtrip codec engine by default. The legacy path is reachable via --engine legacy or MXCLI_ENGINE=legacy for the constructs the codec can't yet reproduce (notably SOAP); where the codec path can't reproduce a construct it refuses the op rather than dropping data. This is the culmination of the Issue 7 parity effort that brought every document type — domain models, microflows, pages, workflows, security, REST/OData, agent-editor docs, settings, and more — to mx check parity on the codec path.

  • Catalog objects index includes associations — the unified objects view now unions the associations table (ObjectType = ASSOCIATION), so it is a complete index for the cataloged document types and consumers no longer need a separate associations query. Catalog schema bumped to v3; cached .mxcli/catalog.db files rebuild automatically on the next refresh catalog.

  • Catalog indexes image collections, JavaScript actions, and data transformers — these document types had no catalog table at all; they are now built (via the raw-unit surface, so no CatalogReader/backend change) into their own tables and unioned into objects (IMAGE_COLLECTION, JAVASCRIPT_ACTION, DATA_TRANSFORMER). describe auto-detect resolves image collections and data transformers by bare name. Catalog schema bumped to v4.

  • Catalog indexes agent-editor documents — agents, AI models, knowledge bases, and consumed MCP services (one shared CustomBlobDocuments$CustomBlobDocument BSON wrapper, distinguished by CustomDocumentType) are now cataloged into their own tables and unioned into objects (AGENT, AI_MODEL, KNOWLEDGE_BASE, CONSUMED_MCP_SERVICE). The document name turned out to be a top-level wrapper field (not buried in the inner JSON blob), so this reads through the raw-unit surface with no CatalogReader/backend change, and describe auto-detect resolves all four by bare name. Catalog schema bumped to v5; this completes the objects index for the document types tracked in #658. (Verified against test3-app: 8 agent-editor docs across all four types.)

Fixed

  • Page authoring fidelity — several page constructs that were silently dropped or mis-stored are fixed: DYNAMICTEXT Attribute bindings are no longer dropped (#650); ALTER PAGE can set conditional Visible/Editable expressions without tripping CE0117 (#627); a ComboBox datasource property that was silently dropped is now caught at check time (#643); a quoted where '<xpath>' constraint is no longer mis-stored as CE0161 (#642); and gallery DesktopColumns + class are honoured on pluggable widgets.
  • check catches more page errors — forward widget→page references (#674) and invalid static widget values (#672, #673) are now flagged at check time instead of surfacing later in Studi...
Read more

v0.12.0

Choose a tag to compare

@github-actions github-actions released this 04 Jun 13:21

What's Changed

  • fix #583: parse StringAttributeType.Length across BSON numeric widths by @ako in #584
  • fix: CREATE ODATA CLIENT strips uppercase MICROFLOW keyword prefix (#573) by @ako in #586
  • fix #585: parse remaining numeric BSON fields across all numeric widths by @ako in #587
  • fix: ALTER STYLING writes design properties on pages and snippets (#631) by @peterjumpnl in #632
  • deps: bump github.com/mattn/go-runewidth from 0.0.23 to 0.0.24 by @dependabot[bot] in #611
  • deps: bump modernc.org/sqlite from 1.50.1 to 1.51.0 by @dependabot[bot] in #612
  • deps: bump github.com/alecthomas/chroma/v2 from 2.24.1 to 2.26.1 by @dependabot[bot] in #613

Full Changelog: v0.11.0...v0.12.0

v0.11.0

Choose a tag to compare

@github-actions github-actions released this 21 May 18:09

What's Changed

  • deps: bump modernc.org/sqlite from 1.50.0 to 1.50.1 by @dependabot[bot] in #562

Full Changelog: v0.10.0...v0.11.0

v0.10.0

Choose a tag to compare

@github-actions github-actions released this 12 May 15:54

What's Changed

  • deps: bump github.com/fsnotify/fsnotify from 1.10.0 to 1.10.1 by @dependabot[bot] in #537
  • deps: bump golang.org/x/term from 0.42.0 to 0.43.0 by @dependabot[bot] in #536
  • ci: bump actions/cache from 4 to 5 by @dependabot[bot] in #535

Full Changelog: v0.9.0...v0.10.0

v0.9.0

Choose a tag to compare

@github-actions github-actions released this 08 May 16:38

What's Changed

  • fix: skip System.* references in mxcli check --references by @hjotha in #523
  • fix: classify reverse-Reference traversal through entity inheritance by @hjotha in #522
  • feat: support inheritance split and cast statements by @hjotha in #365
  • Pull by @ako in #531
  • fix: roundtrip REST mapping cardinality via as list of syntax by @hjotha in #519
  • fix: emit "empty" keyword for typed Java action arguments by @hjotha in #521
  • fix: prevent catalog crash on duplicate business event channels by @dhruvbehl in #533

New Contributors

Full Changelog: v0.8.0...v0.9.0

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 05 May 06:40

What's Changed

  • Misc by @ako in #247
  • fix: handle missing TaskPage key in workflow activity mutation by @retran in #243
  • Add test enablers: MockPageMutator, MockWorkflowMutator, registry completeness by @retran in #244
  • test: add visitor tests for 20 untested source files by @retran in #245
  • fix: make workflow mutator property lookup case-insensitive; fix REST… by @ako in #248
  • feat: Support local file metadata for OData clients by @dionesiusap in #210
  • feat: add mxcli catalog search and show commands by @dionesiusap in #218
  • feat: support full user targeting on workflow USER TASK (fixes #169) by @ako in #251
  • feat: self-describing syntax feature registry for LLM-friendly help discovery by @ako in #252
  • test: add mock tests for 8 executor handler files by @retran in #253
  • test: expand mock tests for 28 executor handler files by @retran in #254
  • test(linter): add unit tests for all 14 untested linter rules by @retran in #255
  • test(catalog): add unit tests for builder pure helper functions by @retran in #256
  • fix: preserve MPR v1 contents hash and UnitID across DROP+CREATE by @hjotha in #258
  • Misc by @ako in #269
  • fix: accept qualified function calls in expression parser by @hjotha in #259
  • fix: normalise built-in Mendix function case in expression roundtrip by @hjotha in #260
  • fix: gate Mx 9 microflow roundtrip keys by project version by @hjotha in #261
  • fix: treat terminal nested IF as returning in flow builder by @hjotha in #262
  • fix: preserve decision/loop captions across nested control flow by @hjotha in #263
  • fix: preserve rule-based decision subtype across microflow roundtrips by @hjotha in #265
  • fix: preserve rule split describer output and free annotations by @hjotha in #266
  • fix: correct microflow body syntax in bug-test 258 by @hjotha in #270
  • fix: DESCRIBE PAGE recurses into ScrollContainer / TabControl children by @hjotha in #271
  • Misc by @ako in #278
  • fix: support log node expressions and harden microflow describe roundtrip by @hjotha in #264
  • fix: stabilize MDL roundtrip and integration test harness by @hjotha in #267
  • refactor: remove ExecContext.executor back-pointer by @retran in #274
  • feat: @anchor annotation for microflow sequence flow endpoints by @hjotha in #276
  • refactor: extract CatalogDB interface for WASM portability by @retran in #277
  • deps: bump github.com/jackc/pgx/v5 from 5.9.1 to 5.9.2 by @dependabot[bot] in #284
  • feat: import consumed REST client from OpenAPI 3.0 spec by @ako in #286
  • fix: create OpenApiTest module before use in openapi-import doctype test by @ako in #288
  • fix: preserve change-member name when entity type is unknown (#282) by @hjotha in #283
  • fix: traverse through unpaired ExclusiveMerge in describe (#281) by @hjotha in #285
  • refactor: quick-win cleanup — panic stubs, SaveToFile, dead code, error handling, syncWriter by @retran in #287
  • refactor: introduce LintReader interface, decouple linter from sdk/mpr by @retran in #289
  • refactor: add type-safe BSON helpers in writer_security by @retran in #297
  • deps: bump modernc.org/sqlite from 1.48.2 to 1.49.1 by @dependabot[bot] in #300
  • fix: drop empty else branch from describer output by @hjotha in #305
  • fix: preserve commit error handling through describe/exec/describe by @hjotha in #309
  • fix: honor branch anchor destination on split-to-merge flows by @hjotha in #311
  • fix: skip reference checks for excluded microflows by @hjotha in #313
  • feat(executor): allow MXCLI_EXEC_TIMEOUT to override the per-statement timeout by @hjotha in #315
  • refactor: extract microflow anchor selection helpers by @hjotha in #325
  • feat: support microflow download file statement by @hjotha in #333
  • fix: write valid show-page parameter mappings by @hjotha in #338
  • fix: refresh empty change-object actions by @hjotha in #340
  • fix: preserve microflow-call BSON field order by @hjotha in #342
  • fix: preserve compact reverse-association retrieves by @hjotha in #356
  • fix: emit ResultHandlingHttpResponse for REST 'returns response' by @hjotha in #378
  • fix: write REST HttpResponse result variable type by @hjotha in #376
  • fix: write valid change-action item storage lists by @hjotha in #374
  • fix: emit list retrieve for owner-both reverse references by @hjotha in #381
  • fix: preserve void EndEvent returns in describe by @hjotha in #371
  • fix: infer java action result variable types by @hjotha in #357
  • fix: register import mapping result variable types by @hjotha in #360
  • fix: preserve object-valued owner-both reverse retrieves by @hjotha in #384
  • fix: preserve manual while-true loop roundtrips by @hjotha in #354
  • feat: full nanoflow support — CREATE, DROP, SHOW, DESCRIBE, DIFF, MERMAID, security, and agentic skill by @retran in #301
  • fix(writer): drop synthetic trailing newline from EndEvent ReturnValue by @hjotha in #317
  • feat: support free microflow annotations by @hjotha in #319
  • fix: do not emit annotations before unsupported-action comments by @hjotha in #307
  • fix: suppress default anchor fragments in describe by @hjotha in #321
  • fix: preserve multiline source expression whitespace by @hjotha in #323
  • fix: pair microflow splits with nearest merge by @hjotha in #327
  • fix: preserve nested loop body flow traversal by @hjotha in #329
  • feat: preserve change object refresh modifier by @hjotha in #363
  • feat: support legacy microflow call web service statement by @hjotha in #334
  • fix: preserve attribute-based list operations by @hjotha in #344
  • fix: preserve incoming anchors for inheritance splits by @hjotha in #454
  • fix: emit loop captions during microflow describe by @hjotha in #444
  • test: cover empty EndEvent return serialization by @hjotha in #446
  • feat: support enum split microflow statements by @hjotha in #364
  • fix: preserve mapping result range cardinality by @hjotha in #372
  • feat: support empty Java action arguments by @hjotha in #336
  • fix: preserve no-merge branch continuations by @hjotha in #355
  • deps: bump github.com/microsoft/go-mssqldb from 1.9.8 to 1.10.0 by @dependabot[bot] in #485
  • deps: bump go.uber.org/zap from 1.27.1 to 1.28.0 by @dependabot[bot] in #484
  • deps: bump github.com/fsnotify/fsnotify from 1.9.0 to 1.10.0 by @dependabot[bot] in #483
  • deps: bump github.com/alecthomas/chroma/v2 from 2.23.1 to 2.24.1 by @dependabot[bot] in #482
  • deps: bump modernc.org/sqlite from 1.49.1 to 1.50.0 by @dependabot[bot] in #481
  • fix: preserve annotations attached inside loop bodies by @hjotha in #331
  • fix: stabilize integration CI baseline by @hjotha in #412
  • fix: reject duplicate microflow output variables by @hjotha in #337
  • fix: p...
Read more