From a8fadc2c4d43f536bc0fd78903dce55cd6871789 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 22 Jul 2026 02:16:37 +0000 Subject: [PATCH 1/2] fix(tests): green the integration doctype suite after widget-reconciliation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `test-integration` suite (TestMxCheck_DoctypeScripts) started failing once the multi-version pluggable-widget reconciliation landed. Two showcase scripts regressed — both because reconciliation stopped masking genuine widget incompleteness, not because of a defect in the generated BSON: 32-pluggable-widget-object-lists-v010.mdl (modelsdk): the OL09 HeatMap only set its SCALECOLOR entries and never bound a data series, so mx check reported CE0642 "Property 'Series'/'Value attribute' is required". Reconciling the HeatMap definition to the installed .mpk correctly marks those required (the old embedded template understated it). Complete the example with the widget-level DataSource / HorizontalAxisAttribute / VerticalAxisAttribute / ValueAttribute binding, mirroring the passing HeatMap in 34-chart-widget-examples.mdl — the object-list showcase now demonstrates a complete, deployable heat map. 17-custom-widget-examples.mdl (both engines): the IMAGE showcases author bare/default static-image-mode Image widgets to demonstrate the IMAGE keyword's basic/dimensions/onclick syntax. MDL exposes no property to bind a static image resource (only imageUrl mode), so a default Image is legitimately "No image selected." — exactly what a freshly-dropped Image shows in Studio Pro. It previously passed only because a stale Atlas_Core.Content.Mendix template default masked it; that default caused CE0463 and was removed in the Image CE0463 fix. Whitelist the message for this script via scriptKnownCEErrors (now documented to also accept a message substring where an error carries no CE code), matching the existing syntax-showcase-limitation pattern. Verified on Mendix 11.12.1: all three previously-failing subtests pass; #32 retains only the globally-tolerated Maps CE0463. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01JXnEgoc2NQP1Y2TWMCMXC4 --- .../32-pluggable-widget-object-lists-v010.mdl | 13 +++++++++++- mdl/executor/roundtrip_doctype_test.go | 20 ++++++++++++++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/mdl-examples/doctype-tests/32-pluggable-widget-object-lists-v010.mdl b/mdl-examples/doctype-tests/32-pluggable-widget-object-lists-v010.mdl index 21728fec6..506e0e6d4 100644 --- a/mdl-examples/doctype-tests/32-pluggable-widget-object-lists-v010.mdl +++ b/mdl-examples/doctype-tests/32-pluggable-widget-object-lists-v010.mdl @@ -385,6 +385,12 @@ create page ObjListV10.P_OL08_LineChart ( -- HeatMap's `scaleColors` object-list → the SCALECOLOR keyword. Each entry maps -- a value percentage to a colour; `ColorValue:` fills the schema's `colour` -- primitive (British spelling — the alias keeps the friendly MDL name). +-- +-- HeatMap binds its data at the WIDGET level (no `series` object-list): the +-- `DataSource:` + `ValueAttribute:` fill the schema's `Series`/`Value attribute` +-- (both required — CE0642 without them), and `HorizontalAxisAttribute:` / +-- `VerticalAxisAttribute:` pick the two category axes. The SCALECOLOR entries +-- then layer the colour scale over that grid. create page ObjListV10.P_OL09_HeatMap ( Title: 'Sales Heat Map', @@ -394,7 +400,12 @@ create page ObjListV10.P_OL09_HeatMap ( layoutgrid lg1 { row r1 { column c1 (DesktopWidth: 12) { - pluggablewidget 'com.mendix.widget.web.heatmap.HeatMap' heatMap1 { + pluggablewidget 'com.mendix.widget.web.heatmap.HeatMap' heatMap1 ( + DataSource: database from ObjListV10.SalesData, + HorizontalAxisAttribute: Region, + VerticalAxisAttribute: PeriodLabel, + ValueAttribute: RevenueValue + ) { scalecolor scLow (ValuePercentage: 0, ColorValue: '#f7fbff') scalecolor scHigh (ValuePercentage: 100, ColorValue: '#08306b') } diff --git a/mdl/executor/roundtrip_doctype_test.go b/mdl/executor/roundtrip_doctype_test.go index 2942fd804..e613d8832 100644 --- a/mdl/executor/roundtrip_doctype_test.go +++ b/mdl/executor/roundtrip_doctype_test.go @@ -117,9 +117,11 @@ var scriptModuleDeps = map[string][]moduleDep{ // not actionable on this branch. var scriptSkipList = map[string]string{} -// scriptKnownCEErrors lists CE error codes that are expected for specific scripts. -// These are syntax showcase scripts that intentionally omit entities, constants, -// headers etc. that full validation requires. +// scriptKnownCEErrors lists CE error codes (or, where an error carries no CE +// code, a distinctive substring of its message) that are expected for specific +// scripts. These are syntax showcase scripts that intentionally omit entities, +// constants, headers etc. that full validation requires. Matched by substring +// against each `[error]` line (see allErrorsKnown). var scriptKnownCEErrors = map[string][]string{ "03-page-examples.mdl": { "CE3637", // Data view listen to gallery in sibling layout-grid column — Mendix scoping limitation @@ -127,6 +129,18 @@ var scriptKnownCEErrors = map[string][]string{ "06b-soap-examples.mdl": { "CE1613", // Dangling service/mapping refs — no web service defined in the test project }, + "17-custom-widget-examples.mdl": { + // The IMAGE showcases author bare/default (static-image-mode) Image + // widgets to demonstrate the IMAGE keyword's basic/dimensions/onclick + // syntax. MDL's image widget exposes no property to bind a static image + // resource (only imageUrl mode), so a default Image is legitimately + // "No image selected." — exactly what a freshly-dropped Image shows in + // Studio Pro until you pick one. Not an mxcli defect: the widget BSON is + // valid. It previously passed only because a stale + // `Atlas_Core.Content.Mendix` template default masked it — that default + // caused CE0463 and was removed in the Image CE0463 fix (549c44f). + "No image selected.", + }, } // TestMxCheck_DoctypeScripts executes each doctype-tests/*.mdl example script From 77cd6bd42c8520a7ebc271072bbf29636445805e Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 22 Jul 2026 03:43:20 +0000 Subject: [PATCH 2/2] fix(deps): bump golang.org/x/text to v0.39.0 for GO-2026-5970 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit govulncheck (the vuln-scan step in Build, Test & Lint) flags GO-2026-5970, "Infinite loop on invalid input" in golang.org/x/text, reachable via catalog.Catalog.Query → sql.Rows.Columns → norm.Form and mpr.OpenWithOptions → sql.Open → norm.Form. The advisory is fixed in golang.org/x/text v0.39.0; bump the (indirect) requirement to it. go mod tidy also nudges the transitive golang.org/x/sync v0.20.0 → v0.21.0. Build is clean. This gate lives in the same CI job as the doctype integration tests, so it only surfaced once those passed; the fix greens the job and, once merged, main. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01JXnEgoc2NQP1Y2TWMCMXC4 --- go.mod | 4 ++-- go.sum | 27 +++++++++------------------ 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/go.mod b/go.mod index 649da2947..c7ca28503 100644 --- a/go.mod +++ b/go.mod @@ -27,7 +27,7 @@ require ( go.mongodb.org/mongo-driver/v2 v2.6.0 go.starlark.net v0.0.0-20260102030733-3fee463870c9 go.uber.org/zap v1.28.0 - golang.org/x/sync v0.20.0 + golang.org/x/sync v0.21.0 golang.org/x/term v0.43.0 gopkg.in/yaml.v3 v3.0.1 modernc.org/sqlite v1.51.0 @@ -72,7 +72,7 @@ require ( golang.org/x/crypto v0.52.0 // indirect golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 // indirect golang.org/x/sys v0.45.0 // indirect - golang.org/x/text v0.37.0 // indirect + golang.org/x/text v0.39.0 // indirect modernc.org/libc v1.72.3 // indirect modernc.org/mathutil v1.7.1 // indirect modernc.org/memory v1.11.0 // indirect diff --git a/go.sum b/go.sum index 71dc5927e..cd91f4f4a 100644 --- a/go.sum +++ b/go.sum @@ -174,37 +174,28 @@ go.uber.org/zap v1.28.0 h1:IZzaP1Fv73/T/pBMLk4VutPl36uNC+OSUh3JLG3FIjo= go.uber.org/zap v1.28.0/go.mod h1:rDLpOi171uODNm/mxFcuYWxDsqWSAVkFdX4XojSKg/Q= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI= -golang.org/x/crypto v0.50.0/go.mod h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q= golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546 h1:mgKeJMpvi0yx/sU5GsxQ7p6s2wtOnGAHZWCHUM4KGzY= golang.org/x/exp v0.0.0-20251023183803-a4bb9ffd2546/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70= -golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= -golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= -golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= -golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA= -golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs= +golang.org/x/mod v0.37.0 h1:vF1DjpVEshcIqoEaauuHebaLk1O1forxjxBaVn884JQ= +golang.org/x/mod v0.37.0/go.mod h1:m8S8VeM9r4dzDwjrKO0a1sZP3YjeMamRRlD+fmR2Q/0= golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w= -golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= -golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ= +golang.org/x/sync v0.21.0 h1:HLII4xRRTtCRkxYp4HNFF0Js/Og6q2i++KXbg0gHCwM= +golang.org/x/sync v0.21.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211110154304-99a53858aa08/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.44.0 h1:ildZl3J4uzeKP07r2F++Op7E9B29JRUy+a27EibtBTQ= -golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= -golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= -golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= -golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= -golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= -golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= -golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= -golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= +golang.org/x/text v0.39.0 h1:UbZz4pLOvn600D6Oh6GGEI6VAmndrEBLv8/6BEXzyus= +golang.org/x/text v0.39.0/go.mod h1:3UwRclnC2g0TU9x8PZiyfOajCd1zaUNHF9cvqcQZ+ZM= +golang.org/x/tools v0.47.0 h1:7Kn5x/d1svx/PzryTsqeoZN4TZwqeH5pGWjefhLi/1Q= +golang.org/x/tools v0.47.0/go.mod h1:dFHnyTvFWY212G+h7ZY4Vsp/K3U4/7W9TyVaAul8uCA= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=