Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
c0ce737
init: opencode no longer inlines every skill into every prompt
claude Nov 9, 2026
3eac1da
lint: CONV013 no longer flags Rollback where it is the only valid choice
claude Nov 9, 2026
4628cba
canon: an unchanged page's round trip no longer rewrites it
claude Nov 9, 2026
1d950a6
feat(catalog): folders() and CATALOG.FOLDERS, empty folders included …
ako Nov 9, 2026
11693d0
Merge pull request #2051 from ako/fix/1436-folders
ako Nov 9, 2026
e43b055
test: strike Account_Overview off the Studio Pro round-trip lossy list
claude Nov 9, 2026
419bb6b
test: strike 23 documents that now round-trip off the known-failure l…
claude Nov 9, 2026
5f569f0
feat(lint): an enumeration value's id in Starlark rules (#1301)
ako Nov 9, 2026
fa2ecd7
Merge pull request #2052 from ako/claude/issue-triage-prioritization-…
ako Nov 9, 2026
e03ea3f
Merge branch 'mendixlabs:main' into main
ako Nov 9, 2026
1b2dbf5
Merge pull request #2053 from ako/fix/1301-enum-value-id
ako Nov 9, 2026
f62c145
move: rewrite access-rule XPaths and map entity and nanoflow roles
claude Nov 9, 2026
62b6e0e
docker: build, run and reload check and build the project as stored
claude Nov 9, 2026
a12e88f
pages: a snippet parameter from an enclosing container; keep a specia…
claude Nov 9, 2026
298713f
Merge remote-tracking branch 'origin/main' into claude/issue-triage-p…
claude Nov 9, 2026
98cf0f5
Merge pull request #2061 from ako/claude/issue-triage-prioritization-…
ako Nov 9, 2026
527ce10
test: pin a quoted entity-type JavaScript action argument
claude Nov 9, 2026
80398d9
feat(catalog): annotations() and CATALOG.ANNOTATIONS for domain model…
ako Nov 9, 2026
e8e8601
pages: document the empty placeholder and refuse one that cannot build
claude Nov 9, 2026
2a19c35
Merge pull request #2062 from ako/fix/1300-dm-annotations
ako Nov 9, 2026
9552a62
feat(lint): jar_files() lists the jars in userlib/ and vendorlib/ (#1…
ako Nov 9, 2026
5c171e6
Merge pull request #2065 from ako/claude/issue-triage-prioritization-…
ako Nov 9, 2026
3f869a5
Merge pull request #2066 from ako/fix/1304-jar-files
ako Nov 9, 2026
9339c6c
Merge mendixlabs/mxcli main (v0.31.0 release) into ako/mxcli main
claude Nov 10, 2026
ca76e24
style: gofmt splice_handler_test.go with the pinned toolchain's gofmt
claude Nov 10, 2026
68d556f
brain: capture and promote many entries as one act
claude Nov 10, 2026
4e18c6f
feat(catalog): a widget's caption and tooltip, and its texts tied to …
ako Nov 10, 2026
6798b0f
Merge origin/main
claude Nov 10, 2026
679fd13
Merge pull request #2076 from ako/claude/mxcli-dev-upstream-pr-wm0592
ako Nov 10, 2026
35fb91e
style: gofmt builder_widget_caption_test.go (#1303)
ako Nov 10, 2026
b44b093
fix(catalog): agents and the microflows a Java action runs are refere…
ako Nov 10, 2026
c13d141
Merge pull request #2078 from ako/claude/issue-triage-prioritization-…
ako Nov 10, 2026
5b5dde6
Merge branch 'main' into fix/1303-widget-caption
ako Nov 10, 2026
dabb756
Merge pull request #2077 from ako/fix/1303-widget-caption
ako Nov 10, 2026
82b6c44
Merge branch 'main' into fix/2074-agent-refs
ako Nov 10, 2026
f36f42a
Merge pull request #2079 from ako/fix/2074-agent-refs
ako Nov 10, 2026
c9f4813
fix(agents): create agent writes the selected model Agent Editor need…
ako Nov 10, 2026
992ea29
feat(catalog): agent details, agent tools and published MCP services …
ako Nov 10, 2026
7873925
move: pick the document of the kind the statement names
claude Nov 10, 2026
fd043e6
Merge pull request #2080 from ako/feature/2075-agent-details
ako Nov 10, 2026
26698ad
feat(catalog): agent prompts and tool descriptions in strings (#2075)
ako Nov 10, 2026
f9660e0
Merge remote-tracking branch 'origin/main' into feature/2075-agent-pr…
ako Nov 10, 2026
eddebd6
fix(agents): a consumed MCP service gets its endpoint and credentials…
ako Nov 10, 2026
2a71ba7
Merge origin/main
claude Nov 10, 2026
1dbd2c9
feat(catalog): a published MCP service's tool descriptions in strings…
ako Nov 10, 2026
8026fbe
Merge pull request #2081 from ako/claude/issue-triage-prioritization-…
ako Nov 10, 2026
0b248d0
lint: ARCH001 exempts an entity fed to its own module's snippet or page
claude Nov 10, 2026
0d8bb4e
Merge pull request #2082 from ako/feature/2075-agent-prompts
ako Nov 10, 2026
e9479e1
Merge remote-tracking branch 'origin/main' into fix/2031-agent-select…
ako Nov 10, 2026
5b95161
Merge branch 'fix/2031-agent-selected-model' into fix/2060-consumed-m…
ako Nov 10, 2026
4795392
Merge pull request #2083 from ako/claude/issue-triage-prioritization-…
ako Nov 10, 2026
05b233d
check: resolve a document renamed or moved earlier in the script
claude Nov 10, 2026
0fd8dcc
Merge pull request #2084 from ako/claude/issue-triage-prioritization-…
ako Nov 10, 2026
cc85a94
Merge pull request #2085 from ako/fix/2031-agent-selected-model
ako Nov 10, 2026
96e6414
Merge remote-tracking branch 'origin/main' into fix/2060-consumed-mcp…
ako Nov 10, 2026
80039bc
Merge pull request #2086 from ako/fix/2060-consumed-mcp-endpoint
ako Nov 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions .claude/lint-rules/cross_module_data.star
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@
# (CE1843) — so there is no view entity or microflow to use instead
# (ako/mxcli#2034).
#
# Exempt too: an entity the page hands to a snippet or page of the entity's own
# module that takes it as a parameter. Conversational UI's chat snippet needs a
# data view on ConversationalUI.ChatContext, exactly as the module's own
# full-screen chat page has it; a view entity or microflow cannot stand in for
# the persistent object the snippet expects (ako/mxcli#2069).
#
# Widget properties:
# .id - Widget ID
# .name - Widget name
Expand Down Expand Up @@ -41,6 +47,32 @@ def is_platform_required(entity_ref):
"""The System workflow entities a task page or task inbox must use."""
return entity_ref.startswith("System.Workflow")

def takes_parameter(document, entity_ref):
"""Whether a snippet or page has a parameter of type entity_ref."""
for ref in refs_from(document):
if ref.ref_kind == "parameter" and ref.target_name == entity_ref:
return True
return False

def fed_to_owning_module(container, entity_ref, entity_module, cache):
"""Whether container calls a snippet, or links to a page, of entity_module
that takes entity_ref as a parameter — the module's own UI asking for its
own entity, which only a data view on that entity can supply."""
key = container + "|" + entity_ref
if key in cache:
return cache[key]
found = False
for ref in refs_from(container):
if ref.target_type not in ("SNIPPET", "PAGE"):
continue
if get_module_from_qualified_name(ref.target_name) != entity_module:
continue
if takes_parameter(ref.target_name, entity_ref):
found = True
break
cache[key] = found
return found

def check():
"""
Check that widgets don't reference entities from other modules.
Expand All @@ -50,6 +82,7 @@ def check():

# Track violations per container to avoid duplicate messages
seen = {}
fed = {}

for widget in widgets():
# Skip widgets without entity references
Expand All @@ -65,6 +98,8 @@ def check():

# Check if entity is from a different module
if entity_module != widget.module_name:
if fed_to_owning_module(widget.container_qualified_name, widget.entity_ref, entity_module, fed):
continue
# Create a unique key for this violation
key = "{}:{}".format(widget.container_qualified_name, widget.entity_ref)
if key in seen:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"area": "cmd/mxcli/docker", "date": "2026-11-09", "symptom": "ako/mxcli#1794: for a project with stale stored widget definitions, docker check failed (CE0463) while docker build / run / reload succeeded, building a widget-normalised copy; run --local and Studio Pro failed on the same project.", "cause": "buildOnCopy ran mx update-widgets on its temporary copy before the pre-build mx check and MxBuild — the pre-#646 docker check behaviour, never revisited for the build.", "file": "cmd/mxcli/docker/build.go (buildOnCopy checks the stored copy, recheckCE0463 labels, UpdateWidgetsFirst opt-in), cmd/mxcli/docker.go (--update-widgets on build/run/reload)", "insight": "When one gate's default changes (#646: check what is stored), every other command that runs the same tool on a copy needs the same decision, or two gates disagree about one project and the green one is believed.", "refs": ["ako/mxcli#1794", "ako/mxcli#646", "ako/mxcli#568", "ako/mxcli#1792"], "test": "cmd/mxcli/docker/build_stored_test.go, cmd/mxcli/docker/build_readonly_test.go"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"area": "cmd/mxcli", "date": "2026-11-09", "symptom": "ako/mxcli#1822 (mendixlabs/mxcli#1683): an OpenCode session in an `init --tool opencode` project started with 150 instruction files, 2.7 MB (~73% of a 1M window); .opencode/skills/ copies were described by their title ('Agents') instead of the skill's 'Use when…' description.", "cause": "generateOpenCodeConfig listed .opencode/skills/**/SKILL.md and .ai-context/skills/*/SKILL.md as `instructions`, which OpenCode inlines; wrapSkillContent prepended a second frontmatter described by the first heading in front of the skill's own, and OpenCode reads the first.", "file": "cmd/mxcli/tool_templates.go (generateOpenCodeConfig), cmd/mxcli/init_claudemd.go (wrapSkillContent, splitSkillFrontmatter)", "insight": "A tool adapter written before the Agent Skills migration (#906/#959) kept the force-feed pattern that migration removed; when skills change shape, re-check every per-tool wrapper, which each have their own copy of the old assumption (Vibe's wrapper still reads the heading).", "refs": ["ako/mxcli#1822", "mendixlabs/mxcli#1683", "ako/mxcli#906"], "test": "cmd/mxcli/init_opencode_context_test.go"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"area": "mdl/executor", "date": "2026-11-09", "symptom": "ako/mxcli#1862 (mendixlabs/mxcli#1704): no documented MDL form for Data grid 2's emptyPlaceholder. On main `emptyplaceholder { … }` parsed, checked and executed, but mx check (11.14) then reported CE0463 on the grid.", "cause": "The slot is hidden while showEmptyPlaceholder is 'none' (the default); widgets in a hidden slot are a definition mismatch. Studio Pro's own grid with a placeholder (TestApp WorkflowCommons.ConflictResolution) stores showEmptyPlaceholder 'custom'. MDL-WIDGET10 never saw it because widgetValueMap only counted `key: value` properties as set, not slots filled by child blocks.", "file": "mdl/executor/validate_widgets.go (widgetValueMap marks filled slots), mdl/executor/validate_widget_hidden.go (filled hidden slot is an error), cmd/mxcli/syntax/features_page.go (documented form)", "insight": "'Accepted and round-trips' is not 'works': run mx check on a control page with and without the feature — a plain grid was 0 errors, the same grid plus a placeholder CE0463. Then diff against a Studio Pro-authored instance of the same feature in the fixture (a describe sweep for the keyword finds one) — the difference was a sibling property, not the slot's own BSON.", "refs": ["ako/mxcli#1862", "mendixlabs/mxcli#1704", "ako/mxcli#956"], "ce": ["CE0463"], "test": "mdl/executor/validate_slot_hidden_1862_test.go"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"area": "mdl/executor", "date": "2026-11-09", "symptom": "ako/mxcli#1836 (mendixlabs/mxcli#1687): after moving entities and flows to another module, mx check (11.12.6) reported CE1613 'association Src.Order_Customer / entity Src.Customer no longer exists' at the moved entity's access rule; the rule kept Src.User and a moved nanoflow kept its Src grants while the microflow's were remapped. Enumeration/constant refs in expressions were already fixed (#1671, #1674).", "cause": "UpdateQualifiedNameInAllUnits matched whole strings, prefixes and RewriteExpressionReferences tokens, which deliberately skips path steps (an enumeration rename must not touch a same-named association); moveNanoflow had no remapDocumentAccessRoles call; nothing remapped entity access-rule roles.", "file": "mdl/types/expression_rename.go (RewritePathSteps), mdl/backend/modelsdk/infrastructure_write.go (path steps only when newName is an entity/association), mdl/executor/cmd_move.go (moveNanoflow remap, remapEntityAccessRoles)", "insight": "Whether a path step may be rewritten depends on the renamed element's KIND, which a name-based sweep cannot see — but after the move the element exists under its new name, so asking the domain models whether newName is an entity or association decides it without a new backend method.", "refs": ["ako/mxcli#1836", "mendixlabs/mxcli#1687", "ako/mxcli#1671", "ako/mxcli#605"], "test": "mdl/executor/move_module_split_test.go, mdl/types/expression_rename_test.go"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"area": "mdl/executor", "date": "2026-11-09", "symptom": "ako/mxcli#2057 (mendixlabs/mxcli#1785, mxcli 0.26.0): `CALL JAVASCRIPT ACTION \"NanoflowCommons\".\"RefreshEntity\" (EntityToRefresh = \"CustomModule\".\"NPActivity\")` reported stored with its MDL quotes, CE1613 at mxbuild.", "cause": "Not reproduced on main: the stored EntityTypeCodeActionParameterValue.Entity is the bare qualified name for quoted and unquoted spellings alike, and mx check (11.14, TestApp with NanoflowCommons) reports 0 errors. The entity-type branch (#1137) and its whitespace normalisation (#1171) are the fixes in that path; history here is squashed at v0.26.0, so the exact release cannot be pinned.", "file": "mdl/executor/cmd_microflows_builder_calls.go (entityTypeArgument)", "insight": "For this class, verify with the BSON value (`mxcli bson dump --type nanoflow --object X | grep -A1 Entity`) and mx check, never describe — describe prints quoted and broken values identically. A report against an old version that main does not reproduce still earns a verbatim regression test, so a regression is caught by name.", "refs": ["ako/mxcli#2057", "mendixlabs/mxcli#1785", "mendixlabs/mxcli#1137", "mendixlabs/mxcli#1171"], "test": "mdl/executor/cmd_microflows_builder_entity_type_arg_test.go (TestBuildJavaScriptAction_QuotedEntityTypeArgument)"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"area": "mdl/executor", "date": "2026-11-09", "symptom": "ako/mxcli#2055: describe → exec of TestApp's WorkflowCommons.ManageTaskAssignments refused 'snippet …Snip_TaskAssignment_UserTask_Assignees requires parameter $Account'; with that refusal lifted, the rebuilt page failed mx check with CE1613 'System.User.FullName no longer exists' at two labels.", "cause": "(1) buildSnippetCallParams accepted an omitted snippet parameter only from the nearest data container (pb.entityContext); Mendix takes it from any enclosing one — here a System.User data view around a Data grid 2 of System.WorkflowUserTask, stored with no mapping, mx check 0 errors. (2) associationSourcePath printed a single hop as the bare association, dropping a stored DestinationEntity that specialises the association's end.", "file": "mdl/executor/cmd_pages_builder_v3_widgets.go (outerEntityContexts, contextSupplies), mdl/executor/widget_engine.go (Build pushes the outer context), mdl/executor/cmd_pages_describe_datasource.go (withSpecialisedDestination)", "insight": "Lifting a refusal can turn a loud failure into a silent broken write: after making the builder accept the call, run mx check on the result before calling it fixed — the refusal had been hiding a describe gap (#721 L5's specialised-destination class, single-hop case) that produced CE1613.", "refs": ["ako/mxcli#2055", "ako/mxcli#1897", "ako/mxcli#868", "mendixlabs/mxcli#1467"], "test": "mdl/executor/snippet_call_outer_context_test.go"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"area": "mdl/executor", "date": "2026-11-10", "symptom": "ako/mxcli#2070 (mendixlabs/mxcli#1790): `rename page M.Old_Page to New_Page;` then `show page M.New_Page` in a microflow of the same script: check --references reported 'page not found: M.New_Page'; exec ran it and mx check reported 0 errors.", "cause": "collectSingle recorded a RENAME (and a cross-module MOVE) only in scriptContext.indirectDocs, which only the alter-target check (#1821) reads. Every reference check — show page, call microflow, snippet calls, navigation — consults the kind's own script-defined set (sc.pages, sc.microflows, …), so the new name was never known to them.", "file": "mdl/executor/validate.go (markIndirectDoc)", "insight": "A second registry for 'documents the script provides' drifts from the first one the moment a new reader appears. Write the indirect name into the same per-kind set the CREATEs fill, so every existing and future reference check inherits it. Verified on TestApp: check refused before, passes after; exec + mx check 0 errors.", "refs": ["ako/mxcli#2070", "mendixlabs/mxcli#1790", "ako/mxcli#1821", "mendixlabs/mxcli#1212"], "test": "mdl/executor/validate_renamed_doc_refs_1790_test.go"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"area": "mdl/executor", "date": "2026-11-10", "refs": ["ako/mxcli#2060", "ako/mxcli#2067"], "ce": [], "symptom": "A consumed MCP service written by mxcli connects nowhere: Agent Editor skips it at startup (\"No value could be found for the local configuration for the constant\") and an agent's `mcp service` block exposes no tools. mx check and the build are green; MDL had no way to write the endpoint constant or the credentials microflow.", "file": "sdk/agenteditor/types.go and mdl/types/agenteditor.go (ConsumedMCPService.Endpoint, AuthenticationMicroflow), agenteditor_read.go / mprread reader_documents.go, agenteditor_write.go encodeConsumedMCPServiceContents (endpoint first, credentials last), agenteditor_carry.go consumedMCPServiceContentsSpec, visitor_agenteditor.go + visitor_strict_properties.go, cmd_agenteditor_write.go / cmd_agenteditor_alter.go (applyConsumedMCPServiceChange takes ctx), cmd_agenteditor_mcpservices.go (describe, consumedMCPEndpointRef, consumedMCPCredentialsProblem), validate.go validateConsumedMCPRefs (check --references), validate_consumed_mcp_endpoint.go (MDL-AGENT03). Tests: agenteditor_consumedmcp_test.go (fixtures testdata/agenteditor/FactoryManagement.{GraphStudio_MCP,JiraMCP}.11_16.json), cmd_agenteditor_consumedmcp_endpoint_test.go, visitor_agent_settings_test.go", "cause": "ConsumedMCPService modelled only protocolVersion, version, connectionTimeoutSeconds and documentation. AgentEditorCommons' IM_ConsumedMCPService (1.1.0, 2.2.1 and 2.6.0 alike) maps endpoint/qualifiedName to MCPEndpointConstant and authenticationMicroflow/qualifiedName to GetCredentialsMicroflow; ConsumedMCPService_CreateUpdateFromModel imports the service only when GetConstantValue of that constant is non-empty, and MCPClient's ConsumedMCPService_CreateMCPClient calls the credentials microflow with no arguments and maps its result to System.HttpHeader objects.", "insight": "**The contract of a referenced microflow is in the consumer's Java, not in the document.** The stored document only names GraphAuth; reading ConsumedMCPService_CreateMCPClient.java (Core.microflowCall(name).execute(ctx) with no params, result mapped to HttpHeader) fixed what check --references must refuse, and the stored GraphAuth (no parameters, returns List of System.HttpHeader via MCPClient.HttpHeader_CreateAndAddToList) confirmed it. Studio Pro saved the six FactoryManagement services in two key orders (endpoint first in five, after protocolVersion in one), each reference documentId first; both fixtures rebuild byte for byte through the carry, and a new document takes the majority order. documentId is the referenced unit's id (the constant's and the microflow's mxunit file names). Controls: dropping the encoder field, leaving authenticationMicroflow unmodelled, ignoring the statement's Endpoint, not keeping the stored references on create or modify, omitting them in describe, accepting a non-String constant, silencing validateConsumedMCPRefs or MDL-AGENT03, and alter not assigning the endpoint each fail their test."}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"area": "mdl/executor", "date": "2026-11-10", "refs": ["ako/mxcli#2031", "ako/mxcli#2067"], "ce": [], "symptom": "An agent written with `create agent` (Agent Editor 2.2+) is refused at startup by ASU_AgentEditor: \"Model with name is referenced but could not be found for the Agent\", and the refusal stops the import of every agent document. mx check and the build are green; MDL had no way to write the agent's selectedModel.", "file": "sdk/agenteditor/types.go and mdl/types/agenteditor.go (SelectedModel), agenteditor_read.go / mprread reader_documents.go, agenteditor_write.go (encoder, after model), agenteditor_carry.go (selectedModel modelled), visitor_agenteditor.go + visitor_strict_properties.go (SelectedModel, SelectedModelName), cmd_agenteditor_write.go + cmd_agenteditor_carry.go selectedModelFrom, cmd_agenteditor_alter.go (keys applied in sorted order), cmd_agenteditor_agents.go describe, validate_agent_selected_model.go (MDL-AGENT02). Tests: agenteditor_carry_test.go TestEncodeAgentContents_SelectedModel, cmd_agenteditor_selectedmodel_test.go, validate_agent_selected_model_test.go, visitor_agent_settings_test.go", "cause": "selectedModel {id, name} was carried on rewrite (#2037) but never modelled, so a new agent had none. AgentEditorCommons 2.2.1 and 2.6.0 AgentFromModel_Validate require SelectedModelID, and AgentFromModel_CreateUpdateAgent retrieves the DeployedModel where Model = SelectedModelID; IM_AgentFromModel maps only selectedModel/id (name is Studio Pro's display text). AgentEditorCommons 1.1.0 does not read it.", "insight": "**Read the importer, not the document, to learn what is required.** The stored documents showed selectedModel on one agent in five apps, which looked optional; the import mapping and the validation microflow (describe microflow AgentEditorCommons.AgentFromModel_Validate) showed it is mandatory from 2.2 and that only the id matters, which fixed both the syntax (id key, optional display name defaulting to the id) and the check rule's scope (every plain create agent, not only MxCloudGenAI). A key that is set by two alter assignments (id and name) must be applied in a fixed order: the Sets map iterates randomly, so the test sets both in one statement and the control (reverse order) fails. Controls: dropping the encoder field, leaving selectedModel unmodelled in the carry, ignoring the statement's SelectedModel, omitting it in describe and silencing MDL-AGENT02 each fail their test; a build without the encoder field changes GraphExplorer's unit on an ICXGraphPilot describe→exec round trip, where the fixed build changes none."}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"area": "mdl/executor", "date": "2026-11-10", "symptom": "ako/mxcli#2072 (mendixlabs/mxcli#1792): with a microflow M.Nightly and a scheduled event M.Nightly, `move scheduled event M.Nightly to folder 'Jobs'` was refused: 'M.Nightly is a microflow, not a scheduled event'.", "cause": "The generic MOVE resolved the name through FindDocumentUnit, which returns the first document of that name in the module whatever its type, then refused it as a mistyped doctype. The comment beside it assumed document names are unique per module; they are unique per document type.", "file": "mdl/executor/cmd_move_document.go (findDocumentOfKind), mdl/backend/modelsdk/placement.go (FindDocumentUnits)", "insight": "A type-agnostic lookup by name is only safe as an authority when the caller does not know the kind. When the statement names one, ask for all matches and pick by kind; keep the first-match fallback so a true typo still gets the 'is a X, not a Y' message. Reproduced on TestApp with the unfixed binary before trusting the mock test.", "refs": ["ako/mxcli#2072", "mendixlabs/mxcli#1792", "ako/mxcli#932"], "test": "mdl/executor/cmd_move_same_name_1792_test.go"}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"area": "mdl/linter", "date": "2026-11-09", "symptom": "ako/mxcli#1838 (mendixlabs/mxcli#1689): CONV013 'uses Rollback error handling instead of Custom' fired on a call to CommunityCommons.ThrowException (a deliberate rollback) and on Java action calls inside a loop, where custom handling is CE0644 — one rule or another always fired.", "cause": "findUnhandledCalls descended into loop bodies and treated every Java action call alike.", "file": "mdl/linter/rules/conv_error_handling.go (no descent into LoopedActivity; isThrowingJavaAction)", "insight": "A lint rule and a check rule that demand opposite things for the same element (CONV013 vs MDL006/CE0644) are a defect in the lint rule: check encodes what Studio Pro accepts. Grep the CE number across mdl/executor before deciding which side is right.", "refs": ["ako/mxcli#1838", "mendixlabs/mxcli#1689", "mendixlabs/mxcli#1202"], "test": "mdl/linter/rules/conv_error_handling_test.go"}
Loading
Loading