mxrb 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.de-DE.md +108 -0
- data/README.md +172 -0
- data/README.pt-BR.md +109 -0
- data/bin/mxrb +1613 -0
- data/docs/README.md +10 -0
- data/docs/de-DE/README.md +24 -0
- data/docs/de-DE/architectural-patterns.md +26 -0
- data/docs/de-DE/architectural-standard.md +48 -0
- data/docs/de-DE/architecture.md +76 -0
- data/docs/de-DE/compiler.md +162 -0
- data/docs/de-DE/conventions.md +19 -0
- data/docs/de-DE/design-system.md +52 -0
- data/docs/de-DE/entity-dsl.md +53 -0
- data/docs/de-DE/native-runtime-quality-report.md +74 -0
- data/docs/de-DE/oql-sql.md +211 -0
- data/docs/de-DE/platform-api-integration.md +36 -0
- data/docs/de-DE/platform-operations.md +243 -0
- data/docs/de-DE/project-structure.md +32 -0
- data/docs/de-DE/ruby-first-roadmap.md +116 -0
- data/docs/de-DE/scaffolds.md +59 -0
- data/docs/de-DE/semantic-refactoring.md +56 -0
- data/docs/de-DE/team-server.md +33 -0
- data/docs/de-DE/validation-matrix.md +64 -0
- data/docs/de-DE/vetclinic-acceptance.md +24 -0
- data/docs/de-DE/writing.md +138 -0
- data/docs/en-US/README.md +24 -0
- data/docs/en-US/architectural-patterns.md +151 -0
- data/docs/en-US/architectural-standard.md +89 -0
- data/docs/en-US/architecture.md +170 -0
- data/docs/en-US/compiler.md +157 -0
- data/docs/en-US/conventions.md +82 -0
- data/docs/en-US/design-system.md +163 -0
- data/docs/en-US/entity-dsl.md +53 -0
- data/docs/en-US/native-runtime-quality-report.md +73 -0
- data/docs/en-US/oql-sql.md +201 -0
- data/docs/en-US/platform-api-integration.md +36 -0
- data/docs/en-US/platform-operations.md +244 -0
- data/docs/en-US/project-structure.md +49 -0
- data/docs/en-US/ruby-first-roadmap.md +186 -0
- data/docs/en-US/scaffolds.md +57 -0
- data/docs/en-US/semantic-refactoring.md +198 -0
- data/docs/en-US/team-server.md +32 -0
- data/docs/en-US/validation-matrix.md +257 -0
- data/docs/en-US/vetclinic-acceptance.md +23 -0
- data/docs/en-US/writing.md +655 -0
- data/docs/pt-BR/README.md +24 -0
- data/docs/pt-BR/architectural-patterns.md +25 -0
- data/docs/pt-BR/architectural-standard.md +533 -0
- data/docs/pt-BR/architecture.md +300 -0
- data/docs/pt-BR/compiler.md +162 -0
- data/docs/pt-BR/conventions.md +19 -0
- data/docs/pt-BR/design-system.md +65 -0
- data/docs/pt-BR/entity-dsl.md +116 -0
- data/docs/pt-BR/native-runtime-quality-report.md +73 -0
- data/docs/pt-BR/oql-sql.md +208 -0
- data/docs/pt-BR/platform-api-integration.md +36 -0
- data/docs/pt-BR/platform-operations.md +260 -0
- data/docs/pt-BR/project-structure.md +32 -0
- data/docs/pt-BR/ruby-first-roadmap.md +239 -0
- data/docs/pt-BR/scaffolds.md +104 -0
- data/docs/pt-BR/semantic-refactoring.md +55 -0
- data/docs/pt-BR/team-server.md +59 -0
- data/docs/pt-BR/validation-matrix.md +86 -0
- data/docs/pt-BR/vetclinic-acceptance.md +50 -0
- data/docs/pt-BR/writing.md +177 -0
- data/examples/sudoku_evaluation.rb +14 -0
- data/examples/sudoku_functional_test.rb +28 -0
- data/lib/mxrb/architecture/graph.rb +124 -0
- data/lib/mxrb/architecture/validator.rb +98 -0
- data/lib/mxrb/benchmark.rb +33 -0
- data/lib/mxrb/compare.rb +390 -0
- data/lib/mxrb/compiler/adapter.rb +96 -0
- data/lib/mxrb/compiler/artifact_document_compiler.rb +102 -0
- data/lib/mxrb/compiler/artifact_materializer.rb +53 -0
- data/lib/mxrb/compiler/client_model_materializer.rb +42 -0
- data/lib/mxrb/compiler/code_action_document_compiler.rb +64 -0
- data/lib/mxrb/compiler/code_action_materializer.rb +35 -0
- data/lib/mxrb/compiler/code_action_type_compiler.rb +32 -0
- data/lib/mxrb/compiler/combo_box_bundle_compiler.rb +314 -0
- data/lib/mxrb/compiler/compatibility_analyzer.rb +169 -0
- data/lib/mxrb/compiler/constants_materializer.rb +111 -0
- data/lib/mxrb/compiler/data_grid_bundle_compiler.rb +290 -0
- data/lib/mxrb/compiler/database_connector_action_compiler.rb +280 -0
- data/lib/mxrb/compiler/deployment_asset_copier.rb +60 -0
- data/lib/mxrb/compiler/deployment_bootstrapper.rb +208 -0
- data/lib/mxrb/compiler/deployment_materializer.rb +43 -0
- data/lib/mxrb/compiler/deployment_metadata.rb +64 -0
- data/lib/mxrb/compiler/domain_document_compiler.rb +153 -0
- data/lib/mxrb/compiler/domain_model_materializer.rb +35 -0
- data/lib/mxrb/compiler/domain_security_compiler.rb +82 -0
- data/lib/mxrb/compiler/gallery_bundle_compiler.rb +190 -0
- data/lib/mxrb/compiler/generic_widget_bundle_compiler.rb +281 -0
- data/lib/mxrb/compiler/image_bundle_compiler.rb +216 -0
- data/lib/mxrb/compiler/java_proxy_generator.rb +509 -0
- data/lib/mxrb/compiler/legacy_data_grid_compiler.rb +267 -0
- data/lib/mxrb/compiler/legacy_page_builder.rb +287 -0
- data/lib/mxrb/compiler/mda.rb +99 -0
- data/lib/mxrb/compiler/microflow_document_compiler.rb +85 -0
- data/lib/mxrb/compiler/microflow_materializer.rb +48 -0
- data/lib/mxrb/compiler/microflow_node_compiler.rb +250 -0
- data/lib/mxrb/compiler/model_package.rb +116 -0
- data/lib/mxrb/compiler/model_values.rb +67 -0
- data/lib/mxrb/compiler/nanoflow_program_compiler.rb +483 -0
- data/lib/mxrb/compiler/navigation_document_compiler.rb +93 -0
- data/lib/mxrb/compiler/packager.rb +100 -0
- data/lib/mxrb/compiler/page_bundle_builder.rb +56 -0
- data/lib/mxrb/compiler/page_bundle_compiler.rb +2004 -0
- data/lib/mxrb/compiler/page_document_compiler.rb +77 -0
- data/lib/mxrb/compiler/portable_packager.rb +356 -0
- data/lib/mxrb/compiler/project_jar_archive.rb +84 -0
- data/lib/mxrb/compiler/project_jar_builder.rb +121 -0
- data/lib/mxrb/compiler/project_materializer.rb +139 -0
- data/lib/mxrb/compiler/project_model_orderer.rb +52 -0
- data/lib/mxrb/compiler/runtime_data_types.rb +31 -0
- data/lib/mxrb/compiler/runtime_model_schema.rb +90 -0
- data/lib/mxrb/compiler/schemas/runtime-10.24.0.73019.json +1052 -0
- data/lib/mxrb/compiler/schemas/runtime-11.json +1215 -0
- data/lib/mxrb/compiler/schemas/runtime-6.10.8.json +1148 -0
- data/lib/mxrb/compiler/schemas/runtime-7.17.0.json +1144 -0
- data/lib/mxrb/compiler/schemas/runtime-7.5.0.json +1215 -0
- data/lib/mxrb/compiler/schemas/runtime-9.6.1.29396.json +868 -0
- data/lib/mxrb/compiler/schemas/system-model-10.24.0.73019.b64 +1135 -0
- data/lib/mxrb/compiler/schemas/system-model-11.12.1.b64 +815 -0
- data/lib/mxrb/compiler/schemas/system-model-6.10.8.b64 +497 -0
- data/lib/mxrb/compiler/schemas/system-model-7.17.0.b64 +519 -0
- data/lib/mxrb/compiler/schemas/system-model-7.5.0.b64 +504 -0
- data/lib/mxrb/compiler/schemas/system-model-9.6.1.29396.b64 +816 -0
- data/lib/mxrb/compiler/security_materializer.rb +104 -0
- data/lib/mxrb/compiler/settings_document_compiler.rb +45 -0
- data/lib/mxrb/compiler/settings_materializer.rb +25 -0
- data/lib/mxrb/compiler/source_model.rb +128 -0
- data/lib/mxrb/compiler/system_model_seed.rb +88 -0
- data/lib/mxrb/compiler/system_queue_materializer.rb +54 -0
- data/lib/mxrb/compiler/system_text_materializer.rb +49 -0
- data/lib/mxrb/compiler/translation_materializer.rb +95 -0
- data/lib/mxrb/compiler/web_bundle_builder.rb +155 -0
- data/lib/mxrb/compiler/web_list_data_source.rb +139 -0
- data/lib/mxrb/compiler/web_operation_compiler.rb +614 -0
- data/lib/mxrb/compiler/web_shell_materializer.rb +194 -0
- data/lib/mxrb/compiler/widget_package_extractor.rb +63 -0
- data/lib/mxrb/doctor.rb +116 -0
- data/lib/mxrb/dsl/builder.rb +1636 -0
- data/lib/mxrb/errors.rb +18 -0
- data/lib/mxrb/evaluation.rb +131 -0
- data/lib/mxrb/exporter.rb +1716 -0
- data/lib/mxrb/frontend/migrator.rb +775 -0
- data/lib/mxrb/functional.rb +307 -0
- data/lib/mxrb/github/annotator.rb +161 -0
- data/lib/mxrb/initializer.rb +257 -0
- data/lib/mxrb/integrity/validator.rb +136 -0
- data/lib/mxrb/io/bson_codec.rb +145 -0
- data/lib/mxrb/io/mpr_file.rb +558 -0
- data/lib/mxrb/io/mxunit_codec.rb +42 -0
- data/lib/mxrb/marketplace.rb +380 -0
- data/lib/mxrb/model/association.rb +98 -0
- data/lib/mxrb/model/attribute.rb +100 -0
- data/lib/mxrb/model/connector.rb +17 -0
- data/lib/mxrb/model/design_materializer.rb +133 -0
- data/lib/mxrb/model/design_migration.rb +126 -0
- data/lib/mxrb/model/design_system.rb +111 -0
- data/lib/mxrb/model/domain_model.rb +51 -0
- data/lib/mxrb/model/entity.rb +180 -0
- data/lib/mxrb/model/menu.rb +38 -0
- data/lib/mxrb/model/microflow.rb +100 -0
- data/lib/mxrb/model/module.rb +142 -0
- data/lib/mxrb/model/navigation.rb +127 -0
- data/lib/mxrb/model/page.rb +410 -0
- data/lib/mxrb/model/project.rb +187 -0
- data/lib/mxrb/model/unit.rb +48 -0
- data/lib/mxrb/module_initializer.rb +75 -0
- data/lib/mxrb/official_marketplace/content_api.rb +292 -0
- data/lib/mxrb/official_marketplace/dependency_resolver.rb +329 -0
- data/lib/mxrb/official_marketplace/lifecycle.rb +367 -0
- data/lib/mxrb/official_marketplace/module_package_importer.rb +318 -0
- data/lib/mxrb/official_marketplace/widget_package_installer.rb +414 -0
- data/lib/mxrb/official_marketplace.rb +720 -0
- data/lib/mxrb/oql/analyzer.rb +155 -0
- data/lib/mxrb/oql/index_advisor.rb +85 -0
- data/lib/mxrb/oql/plan_analyzer.rb +185 -0
- data/lib/mxrb/oql/server.rb +132 -0
- data/lib/mxrb/oql/sql_server_plan_analyzer.rb +190 -0
- data/lib/mxrb/oql/sql_server_workload_analyzer.rb +80 -0
- data/lib/mxrb/oql/workload_analyzer.rb +175 -0
- data/lib/mxrb/oql/workload_baseline.rb +60 -0
- data/lib/mxrb/oql.rb +424 -0
- data/lib/mxrb/project_lifecycle.rb +76 -0
- data/lib/mxrb/protocols/plan.rb +86 -0
- data/lib/mxrb/protocols.rb +123 -0
- data/lib/mxrb/runtime/database_workspace.rb +677 -0
- data/lib/mxrb/runtime/docker_executor.rb +41 -0
- data/lib/mxrb/runtime/docker_workspace.rb +29 -0
- data/lib/mxrb/runtime/executor.rb +169 -0
- data/lib/mxrb/runtime/java_locator.rb +26 -0
- data/lib/mxrb/runtime/native.rb +474 -0
- data/lib/mxrb/runtime/sql_server_database.rb +146 -0
- data/lib/mxrb/runtime/toolchain.rb +82 -0
- data/lib/mxrb/scaffold/cli.rb +113 -0
- data/lib/mxrb/scaffold/generator.rb +246 -0
- data/lib/mxrb/scaffold/help.rb +80 -0
- data/lib/mxrb/scaffold/page_templates.rb +54 -0
- data/lib/mxrb/scaffold/recipes.rb +198 -0
- data/lib/mxrb/scaffold/registry.rb +82 -0
- data/lib/mxrb/scaffold/templates.rb +723 -0
- data/lib/mxrb/scaffold/transaction.rb +84 -0
- data/lib/mxrb/schema/tables.rb +55 -0
- data/lib/mxrb/semantic/analyzer.rb +473 -0
- data/lib/mxrb/semantic/batch_plan.rb +68 -0
- data/lib/mxrb/semantic/domain_mutator.rb +419 -0
- data/lib/mxrb/semantic/embedder.rb +51 -0
- data/lib/mxrb/semantic/extractor.rb +290 -0
- data/lib/mxrb/semantic/index.rb +623 -0
- data/lib/mxrb/semantic/inliner.rb +216 -0
- data/lib/mxrb/semantic/mover.rb +153 -0
- data/lib/mxrb/semantic/onnx_embedder.rb +34 -0
- data/lib/mxrb/semantic/remover.rb +70 -0
- data/lib/mxrb/semantic/renamer.rb +211 -0
- data/lib/mxrb/semantic/tfidf_embedder.rb +46 -0
- data/lib/mxrb/semantic/vec_store.rb +75 -0
- data/lib/mxrb/team_server.rb +390 -0
- data/lib/mxrb/templates/project/10.24.0.73019.json +32 -0
- data/lib/mxrb/templates/project/11.12.1.json +32 -0
- data/lib/mxrb/templates/project/6.10.8.json +50 -0
- data/lib/mxrb/templates/project/7.17.0.json +50 -0
- data/lib/mxrb/templates/project/7.5.0.json +50 -0
- data/lib/mxrb/templates/project/9.6.1.29396.json +50 -0
- data/lib/mxrb/version.rb +5 -0
- data/lib/mxrb/widget_package.rb +338 -0
- data/lib/mxrb/widget_synchronizer.rb +31 -0
- data/lib/mxrb/writer.rb +3775 -0
- data/lib/mxrb.rb +188 -0
- data/marketplace/catalog.json +10 -0
- data/marketplace/modules/shared-kernel/domain/README.md +4 -0
- data/marketplace/modules/shared-kernel/module.rb +5 -0
- data/marketplace/modules/shared-kernel/mxrb-module.json +9 -0
- metadata +447 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
# MXRB validation matrix
|
|
2
|
+
|
|
3
|
+
[Português](../pt-BR/validation-matrix.md) · **English** · [Deutsch](../de-DE/validation-matrix.md)
|
|
4
|
+
|
|
5
|
+
Last updated: 2026-08-05.
|
|
6
|
+
|
|
7
|
+
The matrix exercises this pipeline using only MXRB:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
original MPR
|
|
11
|
+
-> mxrb validate
|
|
12
|
+
-> mxrb export
|
|
13
|
+
-> mxrb generate
|
|
14
|
+
-> mxrb validate rebuilt
|
|
15
|
+
-> mxrb compare original rebuilt
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Generated files are written outside the source repositories. Original fixtures
|
|
19
|
+
are never modified.
|
|
20
|
+
|
|
21
|
+
| Fixture | Mendix | Format | Units | Result |
|
|
22
|
+
|---|---:|---|---:|---|
|
|
23
|
+
| `ako/QueryApiBlogPost` | 7.17.0-rc5 | v1 | 231 | pass |
|
|
24
|
+
| `ako/mxcli-sudoku` (`Sudoku`) | 11.12.1 | v2 | 409 | pass; 409 `.mxunit` rebuilt |
|
|
25
|
+
| `bhataparnak/MendixApp` | 9.6.1 | v1 | 346 | pass |
|
|
26
|
+
| `ako/ConnectorKitDemo` | 7.5.0 | v1 | 222 | pass |
|
|
27
|
+
| `mendixlabs/TreeViewAndGridView` (`TreeviewDemo`) | 5.21.4 | v1 | 176 | pass |
|
|
28
|
+
| `mendixlabs/TreeViewAndGridView` (`GridViewPlayground`) | 6.10.8 | v1 | 122 | pass |
|
|
29
|
+
|
|
30
|
+
The comparator used for this matrix includes:
|
|
31
|
+
|
|
32
|
+
- project metadata and format;
|
|
33
|
+
- project and module security;
|
|
34
|
+
- the unit tree;
|
|
35
|
+
- entities, native attribute metadata, access rules and associations;
|
|
36
|
+
- pages and their complete deep widget/layout trees, events and data sources;
|
|
37
|
+
- menus;
|
|
38
|
+
- microflow and nanoflow parameters, roles, objects, actions and edges.
|
|
39
|
+
|
|
40
|
+
UUIDs and visual canvas coordinates are normalized because regeneration may
|
|
41
|
+
legitimately assign new identifiers or positions. Mendix names remain canonical
|
|
42
|
+
in the semantic snapshot; Ruby filename and identifier formatting is not used
|
|
43
|
+
as evidence of a model difference.
|
|
44
|
+
|
|
45
|
+
## Bugs found and fixed by the matrix
|
|
46
|
+
|
|
47
|
+
- `SecurityLevel` was reset from `CheckEverything` to `CheckNothing`.
|
|
48
|
+
- Unsupported microflow actions could cause partial body export and replacement.
|
|
49
|
+
- Microflow bodies were absent from structural comparison.
|
|
50
|
+
- Legacy `Attributes`/`Entities` and `NewType` key casing was not preserved.
|
|
51
|
+
- String lengths, enum references, date localization, calculated values and
|
|
52
|
+
legacy defaults could be replaced by shallow generated values.
|
|
53
|
+
- Legacy access rules and entity event handlers could be dropped.
|
|
54
|
+
- Raw Mendix expressions could be emitted as evaluated Ruby instead of preserved
|
|
55
|
+
expression strings.
|
|
56
|
+
- Legacy page layout containers, custom widgets and advanced widget properties
|
|
57
|
+
were preserved only in the native manifest and could not be edited in Ruby.
|
|
58
|
+
- Page merge always preferred the old `Widgets`/`FormCall`, which could ignore
|
|
59
|
+
an intentional deep Ruby edit.
|
|
60
|
+
- New v2 databases used `ContentsConflict` instead of the Studio Pro
|
|
61
|
+
`ContentsConflicts` schema, omitted `_FormatVersion`, and stored null unit
|
|
62
|
+
conflict values.
|
|
63
|
+
- New Mendix object IDs and graph pointers were serialized as UUID strings
|
|
64
|
+
instead of 16-byte BSON GUIDs.
|
|
65
|
+
- Generated attributes used the nonexistent storage type
|
|
66
|
+
`DomainModels$AttributeImpl`.
|
|
67
|
+
- The root project used `ProjectDocuments` as its own containment.
|
|
68
|
+
- Native folders were flattened; folders with duplicate names were collapsed.
|
|
69
|
+
The comparator also collapsed duplicate-name unit summaries and missed this.
|
|
70
|
+
- Typed page/menu overlays introduced version-incompatible page properties and
|
|
71
|
+
lost native menu captions.
|
|
72
|
+
- Optional nanoflow fields absent in the source were added during merge,
|
|
73
|
+
producing an extra Studio Pro deprecation.
|
|
74
|
+
- Imported microflows always regenerated `Excluded`, `MarkAsUsed` and
|
|
75
|
+
`AllowConcurrentExecution` with defaults. This could reactivate a disabled
|
|
76
|
+
example flow and expose intentionally unresolved references.
|
|
77
|
+
|
|
78
|
+
## Deep editable coverage
|
|
79
|
+
|
|
80
|
+
All 264 microflow/nanoflow bodies found in this fixture set are emitted as
|
|
81
|
+
typed Ruby DSL. Unchanged bodies retain the exact native graph through a
|
|
82
|
+
canonical body fingerprint; editing the Ruby invalidates that fingerprint and
|
|
83
|
+
regenerates the graph.
|
|
84
|
+
|
|
85
|
+
The page audit found 1,304 nodes across 25 widget/layout types in 133 pages.
|
|
86
|
+
Core controls retain concise typed methods, and every imported page additionally
|
|
87
|
+
exports its complete Mendix payload as an editable `deep_structure({...})` Ruby
|
|
88
|
+
hash. This includes legacy layouts, custom widgets, list views, radio groups,
|
|
89
|
+
reference-set selectors, static images, text areas and advanced containers.
|
|
90
|
+
BSON binary values are explicit `bson_binary(...)` expressions, not a
|
|
91
|
+
serialized page blob. An automated regression changes a nested custom-widget
|
|
92
|
+
property, regenerates the MPR and verifies that the changed value was written.
|
|
93
|
+
|
|
94
|
+
Menus also retain their concise item DSL plus an authoritative deep structure
|
|
95
|
+
for complete captions, translations, actions and version-specific properties.
|
|
96
|
+
|
|
97
|
+
## Official Mendix 11.12.1 validation
|
|
98
|
+
|
|
99
|
+
The rebuilt Sudoku v2 project was validated with the official Linux tools from
|
|
100
|
+
MxBuild 11.12.1:
|
|
101
|
+
|
|
102
|
+
- `mx show-version`: recognized the rebuilt MPR as `11.12.1`;
|
|
103
|
+
- `mx check --warnings --deprecations --best-practice`: loaded the complete
|
|
104
|
+
model with **0 errors**;
|
|
105
|
+
- diagnostic parity: both original and rebuilt produced exactly **23 warnings,
|
|
106
|
+
1 deprecation and 6 best-practice recommendations**;
|
|
107
|
+
- `mxbuild --target=package`: **BUILD SUCCEEDED** and created a 12 MB MDA;
|
|
108
|
+
- current regression MDA: 11,941,148 bytes, SHA-256
|
|
109
|
+
`fc4fb7a2ea2b4ad7cdb0fcd3296a5dbb5c4d148371aad997ab0032d2c5c0cf33`.
|
|
110
|
+
|
|
111
|
+
This validation exposed and drove the fixes listed above. The six-project MXRB
|
|
112
|
+
matrix was rerun from fresh targets after the fixes and all six v1/v2
|
|
113
|
+
round-trips passed again.
|
|
114
|
+
|
|
115
|
+
## Official Mendix 5–9 validation
|
|
116
|
+
|
|
117
|
+
The other v1 fixtures were also opened by official MxBuild binaries. Original
|
|
118
|
+
and rebuilt projects were tested in separate disposable project directories
|
|
119
|
+
with identical resources:
|
|
120
|
+
|
|
121
|
+
| Fixture | Official tool | Original vs rebuilt result |
|
|
122
|
+
|---|---|---|
|
|
123
|
+
| FirstMedix App 9.6.1 | MxBuild 9.6.1.29396 | exact diagnostic parity: 884 errors and 12 warnings; both stop on the same missing theme/widget resources |
|
|
124
|
+
| QueryApiBlogPost 7.17.0-rc5 | MxBuild 7.17.0 final with `--loose-version-check` | both pass model consistency and reach Java compilation; both report the same 42 missing-dependency errors |
|
|
125
|
+
| ConnectorKitDemo 7.5.0 | MxBuild 7.5.0 | both pass model consistency and reach Java compilation; both report the same 100 missing-dependency errors |
|
|
126
|
+
| GridViewPlayground 6.10.8 | MxBuild 6.10.8 | **BUILD SUCCEEDED** for both original and rebuilt |
|
|
127
|
+
| TreeviewDemo 5.21.4 | MxBuild 6.10.8 with `--loose-version-check` | exact normalized diagnostic parity: 1 error, 6 warnings and 8 deprecations |
|
|
128
|
+
|
|
129
|
+
The rebuilt GridView MDA is 1,501,038 bytes with SHA-256
|
|
130
|
+
`b92646e2a2ce47f8808b9c0624b7c68b3f11f962fefa5be28c5600f0cb628416`.
|
|
131
|
+
MDA archives are not expected to be byte-identical because generated package
|
|
132
|
+
metadata can vary between runs.
|
|
133
|
+
|
|
134
|
+
This run found one real MXRB regression in the 7.17 fixture: a reference
|
|
135
|
+
implementation microflow was exported without its `Excluded=true` metadata,
|
|
136
|
+
so the rebuilt project activated it and reported six unresolved
|
|
137
|
+
`UserManagement.Account` references. Flow metadata is now first-class Ruby DSL
|
|
138
|
+
and the fixed rebuild reaches the same Java compilation failure as the
|
|
139
|
+
original.
|
|
140
|
+
|
|
141
|
+
The old 6.x/7.x distributions have an optional NLog configuration that is
|
|
142
|
+
incompatible with modern Mono reflection. Only that logging section was
|
|
143
|
+
disabled in disposable copies; the MxBuild/model/runtime assemblies were not
|
|
144
|
+
changed. MxBuild 5.21.4 cannot be model-validated on this Linux host because it
|
|
145
|
+
loads WPF `PresentationFramework` plugins before reading the MPR. The same
|
|
146
|
+
original and rebuilt 5.21 projects were therefore compared through MxBuild
|
|
147
|
+
6.10.8's official in-memory upgrade. Exact 5.21 validation remains a Windows
|
|
148
|
+
Studio Pro/MxBuild check.
|
|
149
|
+
|
|
150
|
+
## Confidence boundary
|
|
151
|
+
|
|
152
|
+
A passing matrix demonstrates lossless behavior for the properties inspected by
|
|
153
|
+
`mxrb compare` on these fixtures, plus official MxBuild compatibility or
|
|
154
|
+
diagnostic parity for Mendix 6, 7, 9 and 11. Mendix 5 has parity through the
|
|
155
|
+
official 6.10 in-memory converter, but still needs an exact Windows-side 5.21
|
|
156
|
+
run. This is not proof of full compatibility with every Mendix metamodel
|
|
157
|
+
version, and unknown `.mxunit` encodings continue to be rejected rather than
|
|
158
|
+
guessed.
|
|
159
|
+
|
|
160
|
+
Every native unit retains `.mxrb/native_units.json` as its lossless baseline
|
|
161
|
+
and is also expanded into editable `native_unit` hashes in
|
|
162
|
+
`.mxrb/native_units.rb`. Concise typed DSLs overlay that complete Ruby
|
|
163
|
+
representation where available.
|
|
164
|
+
|
|
165
|
+
## Ruby semantic index
|
|
166
|
+
|
|
167
|
+
The Ruby semantic index was built successfully from every original MPR in the
|
|
168
|
+
matrix. This exercises `find_artifact`, `references_to`, `references_from`,
|
|
169
|
+
`callers_of`, `callees_of`, and `impact_of` without MDL or Studio Pro:
|
|
170
|
+
|
|
171
|
+
| Mendix | Project | Artifacts | References |
|
|
172
|
+
|---|---|---:|---:|
|
|
173
|
+
| 5.21 | TreeviewDemo | 242 | 786 |
|
|
174
|
+
| 6.10 | GridViewPlayground | 132 | 274 |
|
|
175
|
+
| 7.5 | ConnectorKitDemo | 247 | 429 |
|
|
176
|
+
| 7.17 | QueryApiBlogPost | 252 | 414 |
|
|
177
|
+
| 9.6.1 | FirstMedix App | 410 | 665 |
|
|
178
|
+
| 11.12.1 | Sudoku | 495 | 819 |
|
|
179
|
+
| **Total** | **6 projects** | **1,778** | **3,387** |
|
|
180
|
+
|
|
181
|
+
Static analysis was calibrated on the same matrix:
|
|
182
|
+
|
|
183
|
+
| Mendix | Unreferenced warnings | External-reference warnings | Call cycles | Module dependencies |
|
|
184
|
+
|---|---:|---:|---:|---:|
|
|
185
|
+
| 5.21 | 18 | 0 | 0 | 18 |
|
|
186
|
+
| 6.10 | 10 | 3 | 1 | 4 |
|
|
187
|
+
| 7.5 | 23 | 3 | 0 | 5 |
|
|
188
|
+
| 7.17 | 13 | 6 | 0 | 6 |
|
|
189
|
+
| 9.6.1 | 9 | 0 | 0 | 3 |
|
|
190
|
+
| 11.12.1 | 9 | 0 | 0 | 6 |
|
|
191
|
+
|
|
192
|
+
The 6.10 project contains one direct recursive call. Unreferenced artifacts
|
|
193
|
+
remain warnings because Mendix entry points can be invoked by runtime hooks.
|
|
194
|
+
References to absent namespaces are external-contract warnings; missing targets
|
|
195
|
+
inside a module present in the MPR are errors. `System.*` references and
|
|
196
|
+
references from excluded documents are intentionally ignored by that rule.
|
|
197
|
+
|
|
198
|
+
The typed `Mxrb.diff` was also run for all six original/rebuilt pairs. Every
|
|
199
|
+
pair returned zero semantic changes. A controlled microflow rename in the 7.17
|
|
200
|
+
fixture was reduced to precise `changed` entries for its name and references,
|
|
201
|
+
instead of dumping the complete removed and added flow bodies.
|
|
202
|
+
|
|
203
|
+
## Ruby evaluations and coverage gate
|
|
204
|
+
|
|
205
|
+
The current suite contains 1,039 examples and passes with 100.00% line coverage
|
|
206
|
+
(17,224/17,224 executable library lines) and 100.00% branch coverage
|
|
207
|
+
(6,811/6,811 branches).
|
|
208
|
+
Run the enforced gate with:
|
|
209
|
+
|
|
210
|
+
```sh
|
|
211
|
+
MXRB_COVERAGE=1 bundle exec rspec
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
The Ruby evaluation CLI was also exercised against the Mendix 11.12.1 Sudoku
|
|
215
|
+
fixture using `examples/sudoku_evaluation.rb`. All seven checks passed for a
|
|
216
|
+
100.00% model score, covering artifacts, cycles, unresolved internal
|
|
217
|
+
references, unreferenced thresholds and a custom Ruby assertion.
|
|
218
|
+
|
|
219
|
+
## Functional runtime validation
|
|
220
|
+
|
|
221
|
+
`examples/sudoku_functional_test.rb` was executed against the original public
|
|
222
|
+
Sudoku 11.12.1 fixture through both MXRB runtime paths:
|
|
223
|
+
|
|
224
|
+
| Executor | Official gates | Runtime result | Elapsed |
|
|
225
|
+
|---|---|---|---:|
|
|
226
|
+
| Local disposable workspace | `mx check`: 0 errors; portable `mxbuild`: succeeded | 3/3 passed | 34.16 s |
|
|
227
|
+
| Docker disposable workspace | JDK 21 + ICU builder; portable `mxbuild`: succeeded | 3/3 passed | 39.52 s |
|
|
228
|
+
|
|
229
|
+
The cases invoke `Sudoku.ACT_NewEasy`, `ACT_NewMedium` and `ACT_NewHard`.
|
|
230
|
+
The official runtime created an ephemeral HSQLDB, ran the generated
|
|
231
|
+
`MxrbTests.RunAll` after-startup microflow and emitted three `PASS` records plus
|
|
232
|
+
`DONE`. Both executors stopped the runtime immediately afterwards. The source
|
|
233
|
+
MPR was copied before instrumentation and remained unchanged.
|
|
234
|
+
|
|
235
|
+
Ruby assertions now verify return expressions and persisted XPath counts. The
|
|
236
|
+
Docker run confirmed Game counts 1/2/3 and Cell counts 81/162/243 after the
|
|
237
|
+
three cases. JUnit XML remains an optional Ruby-written CI report, not a Java
|
|
238
|
+
test dependency.
|
|
239
|
+
|
|
240
|
+
The 11.12.1 gate now also includes an authenticated Chromium scenario: login,
|
|
241
|
+
Home/Orders navigation, deterministic DOM/layout/style/ARIA snapshots,
|
|
242
|
+
screenshots, explicit SHA-256 baseline comparison, widget/Runtime error
|
|
243
|
+
detection, and real logout. The three supported `page --chain` paths are each
|
|
244
|
+
materialized as a valid MPR and checked by compiler preflight. Dashboard and
|
|
245
|
+
vertical-form `page --template` outputs were also exercised in Runtime with
|
|
246
|
+
audited computed CSS.
|
|
247
|
+
|
|
248
|
+
## Reproducibility and performance
|
|
249
|
+
|
|
250
|
+
`script/validate_matrix` reruns all six disposable round trips and emits JSON
|
|
251
|
+
evidence. The current run covered 1,506 units in 14.760 seconds with zero
|
|
252
|
+
semantic differences. `script/benchmark` measured the Sudoku pipeline on Ruby
|
|
253
|
+
4.0.5: validation 0.2257 s, semantic indexing 0.7624 s, export 2.5101 s,
|
|
254
|
+
generation 2.4659 s and comparison 0.8822 s, totaling 6.8463 s.
|
|
255
|
+
|
|
256
|
+
Deterministic fuzz tests additionally round-trip 250 nested BSON documents and
|
|
257
|
+
50 atomic `.mxunit` files, including binary values, arrays and nested hashes.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# VetClinic end-to-end acceptance
|
|
2
|
+
|
|
3
|
+
The acceptance project was deleted and rebuilt from `mxrb init`, exercising
|
|
4
|
+
every scaffold before adding business rules. Its Mendix 11.12.1 MPR passed
|
|
5
|
+
MXRB validation and lint, architecture evaluation, official `mx check`,
|
|
6
|
+
`mxbuild`, and a synchronized Runtime functional test.
|
|
7
|
+
|
|
8
|
+
The regression suite passed 622 examples with 100% line and branch coverage;
|
|
9
|
+
RuboCop reported no offenses. The model covers enumerations, six business
|
|
10
|
+
entities, `System.User` generalization, system members, access rules, indexes,
|
|
11
|
+
N:1, N:N, and 1:1 associations, flows, a page, navigation, and a scheduled
|
|
12
|
+
event.
|
|
13
|
+
|
|
14
|
+
Scaffolds provide structure rather than business requirements: attributes,
|
|
15
|
+
flow behavior, widgets, permissions, endpoints, tests, and evaluations remain
|
|
16
|
+
project work. The accepted VetClinic had its navigation edited in `project.rb`;
|
|
17
|
+
`init` now creates a minimal profile, layout, and Home page, while additional
|
|
18
|
+
menu items still have no dedicated command. Published
|
|
19
|
+
REST, consumed REST, and Java Action scaffolds are buildable microflow adapters;
|
|
20
|
+
native documents still require an exported baseline or Studio Pro.
|
|
21
|
+
|
|
22
|
+
An independent empty-project smoke test passed `mxrb validate`, official
|
|
23
|
+
`mx check`, and MxBuild without manual editing.
|