Skip to content

Sync ako/mxcli: alter consumed rest service, keep edited lint rules, refuse widget-deleting page rewrites, MCP flow sides and notes - #1635

Merged
ako merged 46 commits into
mendixlabs:mainfrom
ako:main
Oct 22, 2026
Merged

ako merged 46 commits into
mendixlabs:mainfrom
ako:main

Conversation

@ako

@ako ako commented Oct 22, 2026

Copy link
Copy Markdown
Collaborator

Syncs ako/mxcli:main into upstream: 15 commits from fork PRs ako#1534, ako#1535, ako#1544, ako#1545, ako#1551, ako#1564, ako#1565, ako#1566 and ako#1567.

Fixes #1608, #1615 and #1622. Refs #1453 and #280.

Urgent fixes

Pages

MCP backend (--mcp)

  • A microflow created over MCP keeps its flow sides and notes.
    • The create path sent no connection sides, so Studio Pro drew every flow right → left and @anchor had no effect.
    • Any @annotation failed the whole create.
    • Notes on the pre-11.14 constructor are refused with a clear error. The splice's note-line keys are corrected too.
  • ALTER MICROFLOW insert lands on Studio Pro 11.15. It failed with undefined is not an object (evaluating 'u.$Type'), which hid two more defects: "No action defined", and an inserted IF/ELSE wired to the wrong objects. The cause was addressing elements added in the same update by index.
  • A bare System enumeration in a flow signature is an enumeration. ($T: System.UserType) was written as an object type on every engine, and mx check reported CE1613. Over MCP the create was refused outright.

OpenAPI (#280)

Docs

  • The rest-client skill's alter example gets its mdl 1; header

claude and others added 30 commits October 17, 2026 16:36
Accordion groups, Pop-up menu items and other object-list items store no
Name, so `insert into grp1` cannot resolve (#1326,
mendixlabs#1453). Proposes reusing the navigation-list item address
(`acc1 item@1`, `item('One')`, `item(btnInGroup)`) with the `.slot` suffix
from `dataGrid1.controlbar`, with a bare item meaning its body slot.
Table-cell addressing is deferred.

Records two prerequisites found while checking the design: describe
flattens an item's headerContent into its body, and the Accordion hides
headerContent while headerRenderMode is 'text', so a write there is
refused rather than stored hidden.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019httGxDh8UXt1Zoyh3Gh52
The OpenAPI importer wires every JSON response as raw `Response: json`;
users and agents must hand-write the entities and mapping. Proposes an
opt-in `GenerateEntities: Yes` that creates non-persistent entities and
writes inline `Response: mapping` (Rest$ImplicitMappingResponseHandling,
already supported), phased: P0 stops the silent Swagger 2.0 downgrade
(measured: empty contract, no warning) and adds skill guidance; P1 schema
model; P2 object-rooted generation; P3 array roots (needs a Studio Pro
reference); P4 Swagger 2.0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PnpNHdpFqu1sPL7yNAQgTh
… contract

The parser reads only OpenAPI 3 fields, so a Swagger 2.0 spec (the
reporter's petstore.swagger.io/v2) unmarshalled cleanly into an empty
contract: BaseUrl '', request bodies dropped, every response `none`, no
warning. It is now refused with a conversion hint.

Also documents, in the rest-client skill and the docs-site, that the import
returns JSON responses as strings and how to wire `Response: mapping`
instead - the route the reporter's agent got wrong.

Phase 0 of PROPOSAL_openapi_response_entities.md (#1234).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PnpNHdpFqu1sPL7yNAQgTh
The create path sent no connection sides, so Studio Pro drew every flow
right -> left: @anchor, CASE outcome anchors and the builder's own sides
were lost (11.15.0-rc.4: a CASE read back 1 -> 3 on all eight flows). A
note failed the whole create, since mapObjectTree had no Annotation case.

buildFlowDocContent now maps each sequence flow's indexes onto
originConnectionSide/destinationConnectionSide (setPEDSides, shared with
the splice). It also writes notes as Microflows$Annotation and their
lines as Microflows$AnnotationFlow elements: origin/destination plus the
required connection indexes, defaulting through the new
AnnotationFlow.SidesOrDefault, which the modelsdk writer uses as well.
The skeleton adapter keeps a note line's $Type and shifts its ends past
the parameters. On the pre-11.14 constructor, whose flows are untyped,
notes are refused rather than risk a note line read as a sequence flow.

The splice sent a note line with the constructor's originId/destinationId
keys, which PED refuses. It now uses the same mapping and adds note lines
after its new sequence flows, because PED stores an AnnotationFlow after
a SequenceFlow added later in the same update.

Verified live against Studio Pro 11.15.0-rc.4: the same script gives
identical sides on all 10 flows over --mcp and on the modelsdk engine,
note lines included; with the fix reverted every flow read back 1 -> 3.

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

`create microflow M.X ($T: System.UserType)` was written as
DataTypes$ObjectType with Entity "System.UserType" on every engine. The
visitor types each bare qualified name in a parameter or return position
as an entity, and the executor's entity-then-enumeration fallback skips
the System module outright (its entities are not stored in the project),
so a System enumeration kept the entity guess.

The local engines wrote it without complaint and DESCRIBE printed a
plausible bare `System.UserType` (an enumeration renders as `enum X`),
but mx check reports CE1613 "The selected entity 'System.UserType' no
longer exists" for the parameter and for a System-enum return type.
Studio Pro's PED refuses it at write time, which is how it surfaced over
--mcp. The explicit `enum System.UserType` spelling, what DESCRIBE emits
for an enumeration, was refused as "enumeration not found", because the
System module's enumerations are not in ListEnumerations.

settleSystemEnumeration retypes a name in meta.SystemEnumerations before
validation at all six sites (microflow, nanoflow, rule x parameter,
return type), and isKnownEnumeration accepts a System enumeration where
findEnumeration cannot see it. System.User stays an object type.

Verified over --mcp on Studio Pro 11.15.0-rc.4: ped_read_document reads
back DataTypes$EnumerationType for the parameter and the return type; a
stubbed-fix control reproduces the PED error. Locally, mx check 11.14.0
goes from 2x CE1613 to 0 errors.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every insert over --mcp failed on 11.15.0-rc.4 with `undefined is not an
object (evaluating 'u.$Type')`. The splice sent the whole insert as one
ped_update_document and addressed the elements it added in that same update
by index. PED resolves a path against the document as it was before the
update, so none of those sets reach a new element: a set below a new flow's
line fails the whole update, and any other set (an activity's action, a
flow's isErrorHandler) is accepted and lost. Separately, several index-less
adds to one array are stored in reverse and $id() resolves against that
final order, so an insert of more than one element was wired to the wrong
objects.

The insert is now two updates. The first adds the new elements (constructor
properties only, each at the stored length as its index, wired with $id())
and moves the stored ones. The second fills in the new elements: actions,
conditions, loop sources, isErrorHandler and control vectors (0;0 is the
schema default and is not sent). A failed second update leaves the insert
incomplete in Studio Pro, the same contract as CreateMicroflow's
create-then-set; the error says so.

Verified live on 11.15.0-rc.4: plain, IF/ELSE and note inserts match the
default engine on every flow's ends, sides and control vectors and every
object's position, and ped_check_errors is clean on two successive calls.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… do not recreate a renamed one

Bundled lint rules were recognised by file name only, so `mxcli init` and
the session-start `init --sync-skills` overwrote an edited
example_microflow.star (shipped to be customised), and wrote the stock file
back beside a renamed copy, so CUSTOM002 ran twice — once from the stock
list (mendixlabs#1615, #1543).

A bundled file is now refreshed only while its content is a version mxcli
shipped. cmd/mxcli/lint_rules_shipped.txt lists every such version (sha256,
CRLF read as LF), seeded from the whole git history of .claude/lint-rules/;
a test keeps it current and prints the line to add. Any other content is
the project's edit and is kept, named once per mxcli version. A missing
bundled rule is not written while another file in the directory defines its
rule ID. init, init --sync-skills and add-tool share one write path.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NUbjJ5DeS2vysn9hfKir4Y
… takes no variable

An operation created with `Response: json as $Result` describes as
`Response: json`, because the variable is not stored (a consumed REST
operation has none; the call activity names it). The parser rejected that
form with `missing VARIABLE at ')'`, so describe -> edit -> create or modify
was unavailable for every such service (mendixlabs#1608,
#1536). string/file/status responses described as `as ` with
nothing after it.

`Response: json | string | file | status` now takes `as $var` as optional,
and describe prints every kind bare when there is no variable.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NUbjJ5DeS2vysn9hfKir4Y
…n place

There was no MDL way to add an operation to an existing consumed REST
service: `alter consumed rest service … add operation` did not parse, and a
`create or modify` naming the new operations deleted every stored one it did
not list (mendixlabs#1608, #1536).

    alter consumed rest service M.Api
      add operation GetBooking ( … ),
      modify operation PostBooking (Timeout: 60),
      drop operation Old,
      set (BaseUrl: '…', Authentication: none);

The operation body is CREATE's. Actions apply in order. The backend edits
the stored unit as a splice (EditConsumedRestService, saved through
UpdateRawUnitPatch) rather than a rebuild from the semantic model: an
operation no action names is written back byte for byte, a modified one has
only the keys the statement lists re-encoded (with CREATE's encoder), and a
method change that keeps the element's shape keeps the stored body. A
rebuild would reset what the reader does not carry — measured with an
optional query parameter and a test value seeded as Studio Pro writes them,
which `create or modify` from describe output resets and ALTER keeps.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NUbjJ5DeS2vysn9hfKir4Y
…emoves

The statement declares the service's whole operation list, so one naming
only the operations to add deleted the stored ones and reported only
"Modified rest client: MyFirstModule.BookingApi (2 operations)"
(mendixlabs#1608, #1536).

It still applies — as `create or modify entity` does for attributes — and
now names each removed operation and the `alter consumed rest service …
add operation` that adds one without touching the others.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NUbjJ5DeS2vysn9hfKir4Y
Once `describe consumed rest service` output parsed (mendixlabs#1608),
the TestApp round trip executed it for Mappings.RestClient and found the
write changed a Studio Pro-authored service that nothing had changed:

    /Operations[0]: 3 -> 2
    /Operations[1](Request)/Headers[0]: 3 -> 2
    /Operations[1](Request)/Parameters[0]: 3 -> 2

Studio Pro writes marker 3 for Operations, an operation's Headers and
Parameters, 2 for QueryParameters and 1 for Tags — measured on TestApp's
services (11.14.0) and on `mx convert -p` of mxcli-written ones (11.6.6),
which agree. The writer had 2 for the first three, copied from the legacy
serializer. The ALTER splice now keeps the stored Operations marker rather
than writing one.

Mappings.RestClient no longer breaks parse or getput and is struck from the
TestApp allowlist.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NUbjJ5DeS2vysn9hfKir4Y
fix: urgent triage — keep edited bundled lint rules; stop consumed REST operations being lost (#1543, #1536)
…ntract-drift-9p6ini

# Conflicts:
#	.claude/skills/mendix/rest-client/SKILL.md
TestSkillsTeachMDL1 requires every complete script in a skill to start with
`mdl 1;`.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PnpNHdpFqu1sPL7yNAQgTh
…p6ini

OpenAPI response entities: proposal + Phase 0 (refuse Swagger 2.0, document response wiring)
fix(executor): a bare System enumeration in a flow signature is an enumeration
fix(mcp): ALTER MICROFLOW insert lands on Studio Pro 11.15
…bject-list-item-address

# Conflicts:
#	docs/11-proposals/README.md
DESCRIBE folded every widget slot of an object-list item into the item's
body, so an Accordion group's headerContent widgets were printed beside
its content widgets, and a page regenerated from the description stored
them in content. Measured on a blank 11.13.0 app:

  stored:       headerContent -> [txtHead], content -> [txtBody]
  regenerated:  content -> [txtHead, txtBody]

The block form that keeps them apart could not run either:
`headercontent { … }` inside a group failed check with MDL-WIDGET25 "not
a widget in this project". The item builder routes that block; the
widget-kind validator resolved no parent for a child of an item, so the
item's own slot keyword fell through to the unknown-widget error.

- describe keeps each slot apart and prints the body slot as the item's
  children, every other non-empty slot as `<keyword> { … }`;
- the body choice (content, else the first widget slot) is one function,
  bodyItemSlotKey, called by both CREATE's defaultItemSlotKey and describe;
- the validator passes an item's mapping to its children, so a slot the
  item declares is accepted and a misspelt one is still refused.

Control: before the fix the new tests fail with the body holding both
widgets and MDL-WIDGET25; the misspelt-block control passes before and
after. Fixed, the describe -> fresh-app round trip stores txtHead in
headerContent and txtBody in content, and mx check reports 0 errors.

Prerequisite of PROPOSAL_alter_object_list_item_address.md (#1564).
Refs #1326

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019httGxDh8UXt1Zoyh3Gh52
…ts MDL cannot author

`describe page M.P` prints a classic data grid, a reference selector, a
drop-down or a reference set selector as a `-- NOT re-executable` comment,
and executing that output replaced the page with the widget gone — only
"Replaced page M.P", mx check clean on both sides (mendixlabs#1622,
#1554).

A `create or modify` / `create or replace` of a stored page, snippet or
layout that holds such a widget, and does not declare it by name, is now
refused (guard-don't-drop, ADR-0005). The refusal lists every widget, the
`alter` that edits the document while keeping them, and the
`alter … { drop … }` that removes them on purpose first. `check -p`
reports the same, following an earlier `alter` of the document in the
script.

The widgets come from describe itself: describeDroppedWidget already runs
for exactly the widgets MDL cannot author, and now also feeds the guard,
which describes the stored document into io.Discard. Layout describe goes
through describeWidgetBody so the guard sees its widgets too.

The #1415 round-trip test asserted the old behaviour (the description of a
page with a legacy grid executes); it now asserts the refusal, that the
#1415 dangling-selection error stays gone, and that the grid is kept.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01NUbjJ5DeS2vysn9hfKir4Y
…ation attribute (CE7247)

`combobox cb (Attribute: Flag)` on a Boolean, with no data source, passed
`check --references` and `exec` and failed mxbuild with CE7247 "Only
attributes of type Enumeration are allowed here." Enumeration mode writes
the attribute to `attributeEnumeration`, whose AllowedTypes is Enum alone.

Measured on fresh 11.14.0 and 11.13.0 projects, one combo box per type:
String, Integer, Long, Decimal, AutoNumber, Boolean, DateTime and Binary
are CE7247; Enumeration builds clean.

MDL-WIDGET39 now judges an enumeration-mode combo box against that
matrix, carrying the error code per rule (CE2421 for the built-in inputs,
CE7247 for the combo box). Association mode (an options data source) is
not judged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VKmbj53BC2vuUWYmgWgfQ5
fix: refuse a page, snippet or layout rewrite that would delete widgets MDL cannot author
…m-address

docs(proposal): ALTER PAGE addressing of pluggable object-list items
fix: describe keeps an Accordion group's headerContent out of its body
ako and others added 16 commits October 22, 2026 16:30
fix(executor): refuse a combo box in enumeration mode on a non-enumeration attribute (CE7247)
… PostgreSQL

On a standard Windows PostgreSQL install `postgres` always has a password
and there is no sudo, so every passwordless path in resolveSuperuser failed
with "no local PostgreSQL superuser available to create the role/database"
and no way out (#1342, mendixlabs#1485).

- --db-admin-user / --db-admin-password: tried alone when given, password
  passed to psql via PGPASSWORD (never argv), a rejected login reported
  with psql's own message. Refused without --ensure-db; never reaches the
  runtime.
- The no-superuser error now names the flags, PGPASSWORD (which already
  worked but was undiscoverable), and the two CREATE statements with the
  real role and database names.

Verified against a real PG16 cluster initdb'd scram-only with a postgres
password: pre-fix binary reproduces the reported error verbatim; fixed
binary provisions with --db-admin-password and reports a wrong one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011JxhJZ2dtafexgzZPPmdzN
buildUnitCache read every .mxunit in mprcontents/ to learn its $Type and
discarded the bytes, and every write made the next listing repeat it, so
`describe` of one microflow opened 393 of a blank app's 394 unit files.

Unit types are now indexed by the Unit table's ContentsHash and persisted
to .mxcli/unit-types.idx; only a unit whose hash the index has not seen is
opened. Content-addressed entries cannot go stale, so the index survives
writes and in-place re-types without invalidation.

Fixes mendixlabs#1603 (#1513).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MdRSZCA1BzDfFCTFcLJS4r
Each member assignment of a `create` action made the flow builder look up
the module and its domain model, and GetDomainModel decoded every module's
domain model before keeping one; 200 creates of 8 members went from 14 s to
294 s after 30 modules were added.

GetDomainModel now reads and decodes only its module's unit (the reader
filters by container before reading contents), following a generalization
chain into another module only when one exists. One flow build reads
through the existing per-derivation memo, since the builder writes nothing.

On pedapp + 30 modules x 20 entities the issue's script runs in 1.6 s
(exec) and 1.8 s (check --references), from 142.6 s and 40.3 s.

Fixes mendixlabs#1616 (#1549).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MdRSZCA1BzDfFCTFcLJS4r
…l build drops dist/pages

On Mendix versions where mxbuild writes web/dist itself (measured on
11.12.5), only the first build in an `mxbuild --serve` process bundles the
client completely. Every later build in the same process either replaces
dist/ with a monolithic index.js and no pages/ or widgets.css (any non-page
change, or no change at all) — reported as "applied via reload" while every
page 404s — or fails outright with "Could not find a part of the path
'…/web/pages/…'" when a page changes (#1485,
mendixlabs#1580).

Measured over mxbuild's /build API with no watch loop: an unchanged second
build already loses the pages, deleting web/dist or web/ does not help, and
a fresh process builds completely. So the watch loop now builds through
serveRecovery, which restarts the serve process and builds once more on
either shape, keeping the incremental build's restartRequired (a cold build
always says true, which would restart the runtime per change).

End to end on 11.12.5: pre-fix binary leaves dist = chunks + index.js and
`mxcli playwright check` fails; fixed binary applies via reload with
13 page modules and the check passes, and a page edit applies instead of
failing. The 11.14 hint now says mxcli already retried.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011JxhJZ2dtafexgzZPPmdzN
… theme error

After a Sass error, the same `mxbuild --serve` process re-reports that
first error as "[CE6093] The theme could not be compiled" on every later
build, even once the SCSS is fixed — quoting a line no longer in the file —
until `mxcli run restart` (#1482, mendixlabs#1577). Measured
on 11.12.5 over mxbuild's /build API: fixed SCSS, same process → CE6093
twice; fresh process → Success.

serveRecovery now tracks whether the current serve process's last theme
compile failed, and when a theme failure follows another it restarts the
process and builds once more. A first theme failure is reported as-is (it
is genuine), and a failure that survives the restart is the source's own
and current one.

End to end on the 11.12.5 app: pre-fix binary → build #3 failed [CE6093]
Undefined variable; fixed → build #3 applied, the served CSS has the fix,
and a second, different error is reported as itself.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011JxhJZ2dtafexgzZPPmdzN
…tr`, refuse the CE7247 qualified name

A Custom chart's eventDataAttribute bound to an attribute of the other page
parameter ($Ctx) inside a data view over $Entry had no spelling that built:

- `eventDataAttribute: $Ctx.EventData` was MDL-WIDGET42 "is a attribute
  property and cannot hold the expression $Ctx.EventData": a key authored by
  its own name goes through the expression grammar, and only mapped keys took
  `$Param.Attr`;
- `MyFirstModule.ChartContext.EventData` passed check and exec, was stored as
  the AttributeRef alone, and mx check (11.12.5) reported CE7247 "Attribute
  'MyFirstModule.ChartContext.EventData' is not an attribute of entity
  'MyFirstModule.ChartEntry'";
- DESCRIBE printed that binding qualified, so a round trip re-created CE7247.

`$Param.Attr` is now written on any attribute property as the AttributeRef
plus a Forms$PageVariable naming the parameter, the pair Studio Pro stores.
mx check: 0 errors. Check accepts it, including on a key whose kind is unknown
without a project, since it is no Mendix expression (`$Param/Attr` is). A
qualified attribute of an entity that is neither the bound one nor one of its
generalizations is refused by the shared misboundAttributeError (check and
exec give the same message), naming CE7247 and `$Param.Attr`. DESCRIBE prints
a parameter-sourced attribute as `$Param.Attr`; describe -> exec is Unchanged.

The #1591 bug-test MDL pinned the qualified form and now uses `$Ctx.EventData`.

Mirror of mendixlabs#1591 (#1502).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GZbx4k5eUbdTGQEcBaWFdM
A reader that caught a unit between a writer's file rename and its hash
update would learn the row's old ContentsHash with the new file's $Type,
and list the unit under the wrong type once the old bytes came back. The
index now keys what it learns by the SHA-256 of the bytes actually read.

Follow-up to the MPR v2 type index (mendixlabs#1603, #1513).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MdRSZCA1BzDfFCTFcLJS4r
The unit-type index under .mxcli/ is a cache any listing may refresh, as
the catalog is; mdl/scriptdiff's snapshot already excludes the directory
for that reason. The rollback test counted it as a project write.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MdRSZCA1BzDfFCTFcLJS4r
On a module of 229 microflows the dump timed out after 5 minutes, and
with a longer timeout stopped at the 10,000-line output limit, truncated.

A module dump is bounded by the module, so neither default guard applies
to it; an explicit MXCLI_EXEC_TIMEOUT still does, and the line limit is
now configurable for every statement with MXCLI_OUTPUT_LINE_LIMIT (0 for
none). The time went into each microflow's layout derivation: the read
memo it rebuilds through hid the backend's by-name microflow lookup, so
every described flow decoded every microflow in the project. The memo now
forwards that lookup, and a describe reads each unit file once.

A 400-flow module on pedapp: 66.9 s and exit 1 at 10,025 lines before,
5.7 s and all 12,810 lines after; the 229-flow dump is byte-identical.

Fixes mendixlabs#1624 (#1556).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MdRSZCA1BzDfFCTFcLJS4r
…ate skill index

Bare #NNNN in this repo's code means mendixlabs/mxcli — #1342 already
names the Windows web-dir lock there — so the fork-issue numbers used in
the three preceding fixes are replaced with their upstream ones
(mendixlabs#1485, #1577, #1580). The run-local SKILL.md section index
is regenerated by `make skill-index` after its edits.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011JxhJZ2dtafexgzZPPmdzN
Formatting a UUID costs more than the rest of a Unit row, so the container
is compared only for units of the wanted type. The GetDomainModel agreement
test now also runs on an MPR v1 fixture, the path this filter serves.

Follow-up to mendixlabs#1616 (#1549).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MdRSZCA1BzDfFCTFcLJS4r
fix: run-local cluster — ensure-db admin login, serve restart for dropped dist/pages and stale CE6093
fix: cost that scales with the project — v2 type scan, create-member lookups, module dump
fix: pluggable attribute of another page parameter — write `$Param.Attr`, refuse the CE7247 qualified name
@ako
ako merged commit e81c4e4 into mendixlabs:main Oct 22, 2026
15 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

2 participants