Skip to content

fix(pages): container names in item slots (#2109) and bindings through an outer data view (#2107) - #2157

Merged
ako merged 4 commits into
mainfrom
fix/2109-2107-outer-context-bindings
Nov 11, 2026
Merged

ako merged 4 commits into
mainfrom
fix/2109-2107-outer-context-bindings

Conversation

@ako

@ako ako commented Nov 11, 2026

Copy link
Copy Markdown
Owner

Closes #2109. Closes #2107.

Both issues come from a describe page → exec round trip of every page in FactoryManagement (Mendix 11.16). The stored BSON was measured before any code changed. Neither shape occurs in TestApp or PedApp. One commit per issue.

#2109: check refused Studio Pro's own data-container names

check refused its own describe output on four pages (MDL-BUTTON02 "grid1 is the data container the widget sits in directly", MDL-PAGEARG01 "an explicit one is rejected as CE0115"). The untouched app builds them. Its only 4 errors are unrelated workflow images.

A walk of each page's property paths showed three different slots:

Page Where the widget sits Stored
MxModelReflection.MxObjectType_Select (also OIDC grid3, UserCommons.ClaimsForClaimEntityAttribute) Datagrid:grid1 > [columns] > [content], grid with Selection: Single show page mapping Variable {Widget: grid1}: the grid's selection, the shape a control-bar button stores (#122)
OIDC.OIDC_Client_NewEdit actionButton7 Datagrid:grid1 > [filtersPlaceholder] (described as controlbar), grid inside dataView3 microflow argument Variable {Widget: dataView3}
AgentCommons.Version_NewEdit container5 Combobox:comboBox3 > [optionsSourceAssociationCustomContent], inside dataView2 Visible: $currentObject = $dataView2

Change:

  • A selectable grid's name is its selection in its rows too, for show page arguments: rowSelectionOf and namesRowSelection. It is kept apart from selectionOf, so delete $grid is unchanged.
  • A control bar's nearest is "". The bar takes its object from above the grid, but sits inside the grid.
  • A combo box is an object-context container.
  • enteringDataWidgetOf is the one constructor the check walk and both engine sites use. A fix in argContextForChildren alone left exec refusing what check accepted.

Two older tests change on new evidence:

The same probe also built a button directly in dvP passing $dvP clean, which MDL-BUTTON02 still refuses. That question is #2149, not this PR.

#2107: a binding to an outer data view resolved against the nearest one

Studio Pro stores these with the data-view pair SourceVariable {Widget: <outer data view>, PageParameter: …}:

  • markdownViewer1.stringAttribute = GenAICommons.Span.Output with {Widget: dataView1, PageParameter: ToolSpan}.
  • container112 Visible-by-attribute GenAICommons.Trace.HasError with {Widget: dataView6, PageParameter: Trace}.
  • Span_TextGeneration_SlideIn markdownViewer3 adds association steps (Span_Trace).

parameterSourceName ignores a pair whose Widget is set, so describe printed the bare qualified name. The rewrite then read it against the nearest data view: CE7247, or "TraceView has no attribute HasError".

Change: $dvOuter.Attr and $dvOuter/Assoc/Attr, the spelling input widgets already had (#826, #833), now work on a pluggable widget's attribute property and in Visible: … in (…).

  • One resolver, namedObjectVariable, now also used by resolveRootedAssociationPath, and one reader, namedObjectSourceName.
  • MDL-WIDGET34 accepts an enclosing data view.
  • The rooted path is accepted in the form the parser produces. It parses as an association data source, so a test through the expression form passed while the real page still failed with MDL-WIDGET42.
  • WidgetObjectBuilder.SetAttributeWithSteps stores the steps (widgetobj; mcp reports it unsupported).

Evidence

  • Pre vs fixed binary, describe → exec on a FactoryManagement copy: the pre binary refuses all 10 pages. Fixed:
  • Fresh write: a new page with $dvOuter.Output, $dvOuter/Span_Trace/SystemPrompt and Visible: $dvOuter.Flag in (true) builds with mx check 0 errors on 11.16. So do both bug-test scripts.
  • Tests: every edit has a failing-first test, and reverting each of the 16 edits fails its test.
  • Corpus: describe output is identical before and after for all 157 TestApp and 20 PedApp pages and snippets. make test-integration-roundtrip passes, with nothing struck from the allowlist.
  • make ci-local: only the two known macOS mx Java-dependency daemon tests fail. TestIssue1640 passes here, with the TestApp submodule present.

🤖 Generated with Claude Code

https://claude.ai/code/session_011oK82ttaGzay5CwiC2V7cf

ako and others added 4 commits November 11, 2026 21:15
…, control bars and combo box options (#2109)

describe page -> exec of four FactoryManagement pages was refused on its own
output (MDL-BUTTON02, MDL-PAGEARG01), although the stored pages build:

- a show page in a selectable data grid's column passing `$grid1`: the
  grid's selection, stored as Variable {Widget: grid1} as from its control
  bar (MxModelReflection.MxObjectType_Select);
- `$dataView3` from the control bar (filters placeholder) of a grid inside
  dataView3: the bar sits inside the grid, so dataView3 is an outer
  container there (OIDC.OIDC_Client_NewEdit);
- `$dataView2` in a combo box's option content: the option is the combo
  box's own context (AgentCommons.Version_NewEdit).

The check walk and the show page argument context model the three, and
the engine enters a data widget through the same constructor
(enteringDataWidgetOf), so check and exec agree. Re-measured on 11.16:
the control-bar case builds with 0 errors in the variable form written
since #2095; two older tests are updated with that evidence.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011oK82ttaGzay5CwiC2V7cf
Studio Pro stores a binding to an outer data view's object with the
data-view pair SourceVariable {Widget, PageParameter}, with association
steps for a path. describe printed the bare qualified name, and the rewrite
read it against the nearest data view: CE7247 on five ConversationalUI
markdown viewers, "TraceView has no attribute HasError" on Trace_Details.

`$dvOuter.Attr` and `$dvOuter/Assoc/Attr`, the spelling input widgets
already had (#826, #833), now work on a pluggable widget's attribute
property and in `Visible: … in (…)`: one resolver (namedObjectVariable)
for check, describe and exec, MDL-WIDGET34 accepting an enclosing data
view, the rooted path accepted in the form the parser produces, and
WidgetObjectBuilder.SetAttributeWithSteps to store the steps. All six
pages report Unchanged page; a fresh page with the three forms builds with
mx check 0 errors on 11.16.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011oK82ttaGzay5CwiC2V7cf
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011oK82ttaGzay5CwiC2V7cf
@ako
ako merged commit de458bd into main Nov 11, 2026
21 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

1 participant