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,239 @@
|
|
|
1
|
+
# MXRB: Ruby acima de tudo
|
|
2
|
+
|
|
3
|
+
**Português** · [English](../en-US/ruby-first-roadmap.md) · [Deutsch](../de-DE/ruby-first-roadmap.md)
|
|
4
|
+
|
|
5
|
+
## Princípio arquitetural
|
|
6
|
+
|
|
7
|
+
Ruby é a única linguagem pública do MXRB.
|
|
8
|
+
|
|
9
|
+
- O modelo Mendix é lido, criado, alterado e analisado por APIs e DSLs Ruby.
|
|
10
|
+
- A CLI é apenas uma camada fina sobre essas APIs.
|
|
11
|
+
- Não haverá MDL, parser de uma linguagem paralela ou sintaxe própria concorrendo com Ruby.
|
|
12
|
+
- Recursos sem abstração concisa continuam sem perdas e editáveis nos Hashes
|
|
13
|
+
Ruby gerados por `native_unit`.
|
|
14
|
+
- Studio Pro e MxBuild são validadores externos importantes, mas não são dependências do núcleo Ruby.
|
|
15
|
+
|
|
16
|
+
## Capacidades
|
|
17
|
+
|
|
18
|
+
### Disponível
|
|
19
|
+
|
|
20
|
+
- Leitura e escrita profunda de MPR v1 e v2.
|
|
21
|
+
- Exportação de MPR para projeto Ruby editável.
|
|
22
|
+
- Geração, validação e comparação estrutural.
|
|
23
|
+
- Índice semântico de módulos, entidades, atributos, associações e documentos.
|
|
24
|
+
- Consultas Ruby de referências, chamadores, chamadas e impacto transitivo.
|
|
25
|
+
- Comandos CLI `refs`, `callers`, `callees` e `impact`, todos delegando à API Ruby.
|
|
26
|
+
- Renomeação profunda com prévia Ruby e aplicação explícita.
|
|
27
|
+
- Análise estática Ruby de ciclos, alvos ausentes, referências externas,
|
|
28
|
+
artefatos não referenciados e acoplamento entre módulos.
|
|
29
|
+
- Regras de lint personalizadas escritas como objetos chamáveis Ruby.
|
|
30
|
+
- Diff semântico tipado em Ruby, com mudanças `added`, `removed` e `changed`.
|
|
31
|
+
- Navegação estrutural por busca, descrição de relações e árvore semântica.
|
|
32
|
+
- Avaliações executáveis de modelo em Ruby, com checks reutilizáveis, severidade,
|
|
33
|
+
score e extensão por blocos Ruby.
|
|
34
|
+
- Testes funcionais de microflows definidos em Ruby, instrumentados numa cópia
|
|
35
|
+
descartável e executados pelo runtime Mendix sem JUnit.
|
|
36
|
+
- Execução local ou Docker de `mx check`, pacote portátil e runtime, com seleção
|
|
37
|
+
automática da família Java do projeto.
|
|
38
|
+
- Gate nativo de cobertura: 100% de linhas e 100% de branches no CI,
|
|
39
|
+
com default local mais estrito de 100/100 quando os limites são omitidos.
|
|
40
|
+
|
|
41
|
+
Projetos graváveis mantêm um cache do índice semântico identificado por
|
|
42
|
+
fingerprint. `mxrb cache status`, `warm` e `clear` expõem métricas e manutenção;
|
|
43
|
+
a troca usa upsert antes da limpeza da entrada antiga.
|
|
44
|
+
|
|
45
|
+
A validação nativa exata do Mendix 5 continua dependente de Windows/Studio Pro.
|
|
46
|
+
Ela fica documentada como limitação legada remota e não é um gate atual de
|
|
47
|
+
entrega.
|
|
48
|
+
|
|
49
|
+
Perfis de navegação agora leem e escrevem documentos nativos Mendix, incluindo
|
|
50
|
+
homes por papel e menus recursivos. Assets de tema e código fazem round-trip
|
|
51
|
+
com manifesto de checksums; tokens possuem inventário, lint, métricas de
|
|
52
|
+
contraste e migração de literais com preview.
|
|
53
|
+
|
|
54
|
+
## API semântica
|
|
55
|
+
|
|
56
|
+
```ruby
|
|
57
|
+
Mxrb.open("app.mpr") do |project|
|
|
58
|
+
order = project.find_artifact("Sales.Order")
|
|
59
|
+
refs = project.references_to(order)
|
|
60
|
+
callers = project.callers_of("Sales.Recalculate")
|
|
61
|
+
callees = project.callees_of("Sales.Checkout")
|
|
62
|
+
impact = project.impact_of("Sales.Order")
|
|
63
|
+
|
|
64
|
+
impact.artifacts.each do |artifact|
|
|
65
|
+
puts "#{artifact.kind}: #{artifact.qualified_name}"
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Os resultados são objetos Ruby imutáveis: `Mxrb::Semantic::Artifact`,
|
|
71
|
+
`Mxrb::Semantic::Reference` e `Mxrb::Semantic::Impact`.
|
|
72
|
+
|
|
73
|
+
Projetos abertos para escrita persistem no MPR um cache do índice semântico com
|
|
74
|
+
fingerprint. Aberturas somente leitura podem reutilizá-lo, mas nunca alteram o
|
|
75
|
+
projeto.
|
|
76
|
+
|
|
77
|
+
Uma renomeação é sempre inspecionável antes da escrita:
|
|
78
|
+
|
|
79
|
+
```ruby
|
|
80
|
+
Mxrb.open("app.mpr", readonly: false) do |project|
|
|
81
|
+
plan = project.plan_rename("Sales.Order", to: "Invoice")
|
|
82
|
+
plan.changes.each { |change| puts change.inspect }
|
|
83
|
+
plan.apply!
|
|
84
|
+
end
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Na CLI, `mxrb rename app.mpr Sales.Order Invoice` apenas mostra a prévia.
|
|
88
|
+
Acrescente `--apply` para efetivar a alteração.
|
|
89
|
+
|
|
90
|
+
## Remoção segura
|
|
91
|
+
|
|
92
|
+
Units independentes, como microflows e páginas, podem ser inspecionadas antes
|
|
93
|
+
da remoção:
|
|
94
|
+
|
|
95
|
+
```ruby
|
|
96
|
+
Mxrb.open("app.mpr", readonly: false) do |project|
|
|
97
|
+
plano = project.plan_remove("Sales.FluxoSemUso")
|
|
98
|
+
plano.apply! if plano.safe?
|
|
99
|
+
end
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
O plano é bloqueado enquanto houver referências recebidas ou units filhas.
|
|
103
|
+
Elementos embutidos no domínio exigem sua mutação tipada. Na CLI,
|
|
104
|
+
`mxrb remove app.mpr Sales.FluxoSemUso` mostra a prévia e `--apply` só grava
|
|
105
|
+
um plano seguro.
|
|
106
|
+
|
|
107
|
+
## Movimentação segura no módulo
|
|
108
|
+
|
|
109
|
+
Units independentes podem ser movidas para um módulo ou pasta sem alterar seu
|
|
110
|
+
nome qualificado nem suas referências:
|
|
111
|
+
|
|
112
|
+
```ruby
|
|
113
|
+
Mxrb.open("app.mpr", readonly: false) do |project|
|
|
114
|
+
plano = project.plan_move("Sales.Processar", to: "Sales.Automacao")
|
|
115
|
+
plano.apply!
|
|
116
|
+
end
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
O plano preserva o tipo nativo de contenção e bloqueia elementos embutidos do
|
|
120
|
+
domínio, destinos que não são containers, ciclos de pastas e movimentos entre
|
|
121
|
+
módulos. `mxrb move app.mpr Sales.Processar Sales.Automacao` mostra os IDs dos
|
|
122
|
+
containers; `--apply` executa a transação.
|
|
123
|
+
|
|
124
|
+
## Análise estática
|
|
125
|
+
|
|
126
|
+
```ruby
|
|
127
|
+
report = Mxrb.open("app.mpr", &:analyze)
|
|
128
|
+
|
|
129
|
+
report.errors.each { warn _1.message }
|
|
130
|
+
report.unreferenced.each { puts _1.qualified_name }
|
|
131
|
+
report.call_cycles.each { puts _1.artifacts.map(&:qualified_name) }
|
|
132
|
+
report.module_dependencies.each { puts "#{_1.from} -> #{_1.to}" }
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Integrações externas desconhecidas geram aviso; um alvo ausente dentro de um
|
|
136
|
+
módulo existente gera erro. Referências `System.*` são reconhecidas como parte
|
|
137
|
+
da plataforma Mendix.
|
|
138
|
+
|
|
139
|
+
## Diff semântico
|
|
140
|
+
|
|
141
|
+
```ruby
|
|
142
|
+
result = Mxrb.diff("before.mpr", "after.mpr")
|
|
143
|
+
|
|
144
|
+
result.added.each { puts _1.path }
|
|
145
|
+
result.removed.each { puts _1.path }
|
|
146
|
+
result.changed.each { puts "#{_1.before} -> #{_1.after}" }
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
`mxrb diff before.mpr after.mpr` imprime uma mudança tipada por linha, adequada
|
|
150
|
+
para logs e revisão em Git. `mxrb compare` continua compatível com a saída
|
|
151
|
+
textual anterior.
|
|
152
|
+
|
|
153
|
+
## Navegação
|
|
154
|
+
|
|
155
|
+
```ruby
|
|
156
|
+
project.search_artifacts("checkout", kind: :microflow)
|
|
157
|
+
project.describe_artifact("Sales.Checkout")
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
Os comandos equivalentes são `mxrb find`, `mxrb describe` e `mxrb tree`.
|
|
161
|
+
|
|
162
|
+
## Avaliações de modelo
|
|
163
|
+
|
|
164
|
+
```ruby
|
|
165
|
+
result = Mxrb.open("app.mpr") do |project|
|
|
166
|
+
project.evaluate do
|
|
167
|
+
artifact "Sales.Order", kind: :entity
|
|
168
|
+
no_call_cycles
|
|
169
|
+
no_missing_internal_references
|
|
170
|
+
maximum_unreferenced 20, severity: :warning
|
|
171
|
+
forbid_dependency from: :Domain, to: :Presentation
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
abort result.errors.map(&:message).join("\n") unless result.passed?
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Arquivos de avaliação são Ruby comum e rodam com
|
|
179
|
+
`mxrb evaluate app.mpr evaluation.rb`; não existe linguagem de regras paralela.
|
|
180
|
+
|
|
181
|
+
## Marketplace oficial Mendix
|
|
182
|
+
|
|
183
|
+
Esta família permanece separada de `mxrb module`, que instala módulos Ruby do
|
|
184
|
+
catálogo interno. O formato entregue é:
|
|
185
|
+
|
|
186
|
+
```sh
|
|
187
|
+
mxrb marketplace search "Community Commons"
|
|
188
|
+
mxrb marketplace show 170
|
|
189
|
+
mxrb marketplace versions 170 --mendix-version 11.12.1
|
|
190
|
+
mxrb marketplace pull 170 --mpr App.mpr
|
|
191
|
+
mxrb marketplace update 170 --mpr App.mpr
|
|
192
|
+
mxrb marketplace update 170 --mpr App.mpr --apply
|
|
193
|
+
mxrb marketplace remove CommunityCommons --mpr App.mpr
|
|
194
|
+
mxrb marketplace remove CommunityCommons --mpr App.mpr --apply
|
|
195
|
+
mxrb marketplace pull github:mendix/CommunityCommons
|
|
196
|
+
mxrb marketplace import ./CommunityCommons.mpk --mpr App.mpr
|
|
197
|
+
mxrb marketplace login --pat-file .env
|
|
198
|
+
mxrb marketplace audit
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Capacidades entregues:
|
|
202
|
+
|
|
203
|
+
1. API oficial: pesquisar conteúdo público/privado, resolver versões compatíveis,
|
|
204
|
+
baixar pelo `downloadURL` e auditar vulnerabilidades e atualizações.
|
|
205
|
+
2. GitHub: resolver releases públicas, baixar `.mpk` ou arquivo da release,
|
|
206
|
+
extrair com proteção contra caminhos inseguros e registrar versão, origem e
|
|
207
|
+
checksum em lockfile.
|
|
208
|
+
3. MPK local: ler o MPR interno e importar diretamente todas as units e assets
|
|
209
|
+
no MPR de destino via Ruby/SQLite/BSON, sem ferramentas Mendix.
|
|
210
|
+
4. PAT Mendix: validar e armazenar com permissões restritas, exigindo o escopo
|
|
211
|
+
`mx:marketplace-content:read` e enviando-o somente ao host oficial da API.
|
|
212
|
+
5. Lifecycle transacional: `update` e `remove` são prévias por padrão, preservam
|
|
213
|
+
IDs referenciados externamente, recusam assets alterados e protegem MPR,
|
|
214
|
+
`mprcontents`, cache, lock e assets antes de `--apply` explícito.
|
|
215
|
+
6. Dependências oficiais: `marketplace dependencies` lê referências no MPR
|
|
216
|
+
interno, resolve recursivamente, confirma a identidade real em cada MPK,
|
|
217
|
+
reconhece módulos do próprio projeto, instala folhas primeiro e faz rollback.
|
|
218
|
+
7. Export/rebuild autenticado: os grafos Kafka passaram em 10.24 e 11.12, com
|
|
219
|
+
assets, checksums e diagnósticos fonte/reconstrução preservados.
|
|
220
|
+
8. Frontend oficial: DataWidgets 3.11.3 foi importado com Content ID 116540 e
|
|
221
|
+
Version ID `e7b6d703-8e47-42f4-bb92-934e3601e71b`; o Combo box é o componente
|
|
222
|
+
oficial independente Widget/clientModule 219304, versão 2.9.0, Version ID
|
|
223
|
+
`dce845f4-d051-4161-847c-016c01703caa`. A instalação faz backup e substitui
|
|
224
|
+
o asset 2.6.x antes pertencente ao Atlas Core (Content ID 117187).
|
|
225
|
+
9. Aceitação reproduzível: `script/frontend_acceptance` bloqueia drift de
|
|
226
|
+
modelo, assets, checksums ou proveniência do lock/cache/originais. O renderer
|
|
227
|
+
nativo tem zero achados de preflight na origem e reconstrução das fixtures
|
|
228
|
+
aceitas de 10.24 e 11.12.
|
|
229
|
+
10. Migração segura: `mxrb frontend migrate App.mpr` mostra a prévia e somente
|
|
230
|
+
`--apply` grava um plano transacional considerado seguro.
|
|
231
|
+
|
|
232
|
+
GitHub não cobre módulos sem fonte ou release pública; MPK local continua útil
|
|
233
|
+
como rota offline. A integração oficial usa somente o contrato OpenAPI publicado.
|
|
234
|
+
A trilha de migração está concluída em toda a matriz de frontend suportada. O
|
|
235
|
+
oráculo MxBuild externo e opcional retorna zero erros na origem e reconstrução
|
|
236
|
+
de 10.24 e 11.12; `mx check` também preserva diagnósticos observáveis dos
|
|
237
|
+
pacotes byte a byte em cada round-trip. O MXRB permanece independente: `mx` e
|
|
238
|
+
MxBuild são somente oráculos de validação, nunca geradores, mutadores ou
|
|
239
|
+
dependências de runtime.
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Scaffolds de projeto
|
|
2
|
+
|
|
3
|
+
**Português** · [English](../en-US/scaffolds.md) · [Deutsch](../de-DE/scaffolds.md)
|
|
4
|
+
|
|
5
|
+
Todos os comandos aceitam `--target DIR`, recusam sobrescrever arquivos e
|
|
6
|
+
conectam automaticamente os agregadores `evaluate`/`evaluate_dir`. Use
|
|
7
|
+
`mxrb <comando> --help` para ver uso, destino e opções.
|
|
8
|
+
|
|
9
|
+
`--dry-run` mostra arquivos e agregadores sem gravar; `--json` produz saída
|
|
10
|
+
para automação. `mxrb scaffold list` lista geradores e instâncias registradas.
|
|
11
|
+
`mxrb scaffold destroy <kind:name>` remove somente arquivos que ainda possuem
|
|
12
|
+
o hash criado pelo gerador, protegendo edições posteriores.
|
|
13
|
+
|
|
14
|
+
| Comando | Resultado principal |
|
|
15
|
+
| --- | --- |
|
|
16
|
+
| `mxrb init App` | Projeto, módulo principal, perfil Responsive e página Home |
|
|
17
|
+
| `mxrb module new Billing` | Novo módulo conectado ao projeto |
|
|
18
|
+
| `mxrb entity new App.Customer` | `domain/entities/customer.rb` |
|
|
19
|
+
| `mxrb enumeration new App.Status` | `domain/enumerations/status.rb` |
|
|
20
|
+
| `mxrb constant new App.ApiUrl` | `domain/constants/api_url.rb` |
|
|
21
|
+
| `mxrb use-case new App.ACT_Create` | `application/use_cases/act_create.rb` |
|
|
22
|
+
| `mxrb validation new App.VAL_Customer` | `application/validations/val_customer.rb` |
|
|
23
|
+
| `mxrb query new App.QRY_Customers` | `application/queries/qry_customers.rb` |
|
|
24
|
+
| `mxrb repository new App.CustomerRepository` | Contrato e adaptador inicial |
|
|
25
|
+
| `mxrb scheduled-event new App.Cleanup` | Evento agendado e microflow |
|
|
26
|
+
| `mxrb presentation init App` | Pastas e agregador de apresentação |
|
|
27
|
+
| `mxrb page new App.CustomerOverview` | Página mínima com layout, título e roles comentados |
|
|
28
|
+
| `mxrb page templates` | Árvore de modelos de página auditados |
|
|
29
|
+
| `mxrb page new App.Dashboard --template dashboard` | Página baseada em modelo |
|
|
30
|
+
| `mxrb page new App.Order --chain page:nanoflow:microflow` | Fatia vertical executável |
|
|
31
|
+
| `mxrb nanoflow new App.NAN_OpenCustomer` | Nanoflow cliente |
|
|
32
|
+
| `mxrb security init App` | Papéis, `CheckEverything` no projeto e orientação de acesso |
|
|
33
|
+
| `mxrb integration new App.PetApi` | Adaptador de integração |
|
|
34
|
+
| `mxrb published-rest new App.CustomersApi` | Handler editável para REST publicado |
|
|
35
|
+
| `mxrb consumed-rest new App.ExternalPets` | Adaptador REST consumido |
|
|
36
|
+
| `mxrb java-action new App.ParseDocument` | Adaptador para Java Action |
|
|
37
|
+
| `mxrb functional-test new App.ACT_Create` | Definição de teste de runtime |
|
|
38
|
+
| `mxrb evaluation new architecture` | Avaliação estática do modelo |
|
|
39
|
+
| `mxrb design init` | Design system do projeto |
|
|
40
|
+
| `mxrb ci init github` | Workflow GitHub Actions |
|
|
41
|
+
|
|
42
|
+
Entidades começam vazias e apontam para o [guia completo da DSL](entity-dsl.md).
|
|
43
|
+
REST publicado e Java Action geram adaptadores Ruby: o documento/ação nativo
|
|
44
|
+
ainda deve vir do baseline exportado ou do Studio Pro. Os demais itens tipados
|
|
45
|
+
geram diretamente a DSL suportada pelo mxrb.
|
|
46
|
+
|
|
47
|
+
O gerador cria estrutura e conexão, não inventa regras de negócio. Atributos,
|
|
48
|
+
fluxos, widgets, permissões efetivas, URLs e credenciais continuam sendo
|
|
49
|
+
decisões do projeto. Páginas são esqueletos nativos mínimos; roles e conteúdo
|
|
50
|
+
ficam comentados até serem definidos. `init` cria o perfil Responsive e uma
|
|
51
|
+
página Home mínima para que o scaffold possa ser verificado e compilado
|
|
52
|
+
oficialmente. Outras páginas e itens de menu podem ser escritos na DSL Ruby.
|
|
53
|
+
|
|
54
|
+
`mxrb page new App.Order --chain ...` transforma o scaffold mínimo de página
|
|
55
|
+
em uma fatia vertical executável: gera entidade de amostra, microflow de data
|
|
56
|
+
source, formulário com campos e ações, página e item no perfil Responsive. Há
|
|
57
|
+
três cadeias de ação Mendix explícitas:
|
|
58
|
+
|
|
59
|
+
```sh
|
|
60
|
+
mxrb page new App.Order --chain page:microflow
|
|
61
|
+
mxrb page generate App.Order --chain page:nanoflow
|
|
62
|
+
mxrb page g App.Order --chain page:nanoflow:microflow
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
`page:microflow` chama o Runtime diretamente; `page:nanoflow` mantém a ação no
|
|
66
|
+
cliente; `page:nanoflow:microflow` usa o nanoflow como orquestrador cliente e
|
|
67
|
+
chama o microflow no Runtime. Todas criam `ACT_LoadOrder` para o data source;
|
|
68
|
+
as cadeias que terminam em microflow criam também `ACT_RefreshOrder`. Sem
|
|
69
|
+
`--chain`, `page new` preserva o esqueleto mínimo. `page generate` e `page g`
|
|
70
|
+
são aliases de `page new`. Cada cadeia é materializada em um MPR válido, serve
|
|
71
|
+
como ponto de partida removível e exercita o preflight do compilador; arquivos
|
|
72
|
+
existentes nunca são sobrescritos.
|
|
73
|
+
|
|
74
|
+
## Modelos de página
|
|
75
|
+
|
|
76
|
+
No Mendix, page templates são pontos de partida: sua estrutura é copiada para
|
|
77
|
+
uma página comum e editável. O catálogo do MXRB expõe somente padrões que o
|
|
78
|
+
compilador e o Runtime já auditam:
|
|
79
|
+
|
|
80
|
+
```sh
|
|
81
|
+
mxrb page templates
|
|
82
|
+
mxrb page templates --json
|
|
83
|
+
mxrb page new App.Landing --template starter
|
|
84
|
+
mxrb page new App.Empty --template blank
|
|
85
|
+
mxrb page new App.Operations --template dashboard
|
|
86
|
+
mxrb page new App.Order_NewEdit --template form-vertical
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
`form-vertical` cria também entidade de amostra e `ACT_Load...` para o DataView.
|
|
90
|
+
Qualquer modelo pode receber `--chain`; por exemplo,
|
|
91
|
+
`--template dashboard --chain page:nanoflow` adiciona a ação cliente ao
|
|
92
|
+
dashboard. Esses nomes são contratos estáveis do MXRB inspirados nos padrões
|
|
93
|
+
Mendix, não uma promessa de importar silenciosamente todo template instalado
|
|
94
|
+
por Atlas ou Marketplace. Veja a [documentação oficial de páginas](https://docs.mendix.com/refguide/pages/).
|
|
95
|
+
|
|
96
|
+
Para um checkout local durante desenvolvimento:
|
|
97
|
+
|
|
98
|
+
```sh
|
|
99
|
+
mxrb init VetClinic --mxrb-path /caminho/para/mxrb
|
|
100
|
+
cd VetClinic
|
|
101
|
+
bundle install
|
|
102
|
+
bundle exec mxrb generate project.rb
|
|
103
|
+
bundle exec mxrb validate VetClinic.mpr
|
|
104
|
+
```
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Refatoração semântica
|
|
2
|
+
|
|
3
|
+
**Português** · [English](../en-US/semantic-refactoring.md) · [Deutsch](../de-DE/semantic-refactoring.md)
|
|
4
|
+
|
|
5
|
+
O índice semântico combina artefatos tipados e referências BSON.
|
|
6
|
+
`Project.Navigation` participa de impacto, rename e segurança de remoção.
|
|
7
|
+
|
|
8
|
+
```ruby
|
|
9
|
+
Mxrb.open("Shop.mpr", readonly: false) do |project|
|
|
10
|
+
plan = project.plan_rename("Sales.Home", to: "Landing")
|
|
11
|
+
plan.changes.each { puts _1.inspect }
|
|
12
|
+
plan.apply!
|
|
13
|
+
end
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Todo refactoring segue plano, preview e `apply!`. Um rename atualiza BSON e
|
|
17
|
+
`_MxrbArchitecture` na mesma transação. Remove bloqueia referências e unidades
|
|
18
|
+
filhas; move, extract, inline e mutações de domínio expõem mudanças antes de
|
|
19
|
+
gravar.
|
|
20
|
+
|
|
21
|
+
O analyzer encontra alvos ausentes, perfis sem home, nomes duplicados, user
|
|
22
|
+
roles desconhecidas, homes sem acesso, tokens não resolvidos e contraste
|
|
23
|
+
insuficiente. O cache semântico usa fingerprint das unidades; `mxrb cache
|
|
24
|
+
status`, `warm` e `clear` expõem métricas e manutenção.
|
|
25
|
+
|
|
26
|
+
`project.semantic_search_artifacts("criar pedido", limit: 5)` oferece ranking
|
|
27
|
+
determinístico em Ruby. A gem opcional `sqlite-vec` acelera a busca em MPRs
|
|
28
|
+
graváveis com um índice KNN identificado por backend, dimensão e fingerprint
|
|
29
|
+
do modelo. A primeira busca preenche os vetores antes de registrar o índice
|
|
30
|
+
como pronto; projetos somente leitura e plataformas sem a extensão mantêm a
|
|
31
|
+
mesma API em memória. A adaptação legada é
|
|
32
|
+
`mxrb find app.mpr "criar pedido" --semantic`. O comando dedicado também
|
|
33
|
+
expõe backend, limite e distância cosseno:
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
bundle exec mxrb search "pagamento" App.mpr
|
|
37
|
+
bundle exec mxrb search "criar pedido" App.mpr --backend onnx --limit 5
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
O resultado tabular contém rank, distância, nome qualificado e tipo; `--json`
|
|
41
|
+
oferece a mesma informação para automação.
|
|
42
|
+
|
|
43
|
+
Para desenvolvimento ONNX local, use `BUNDLE_WITH=onnx bundle install`.
|
|
44
|
+
`backend: :onnx` e o backend automático passam a usar o pipeline documentado
|
|
45
|
+
`embedding` do Informers com `sentence-transformers/all-MiniLM-L6-v2`. Um job
|
|
46
|
+
dedicado do CI ativa `MXRB_ONNX=1` e executa smoke test real de 384 dimensões;
|
|
47
|
+
a instalação e a suíte comuns não baixam o modelo.
|
|
48
|
+
|
|
49
|
+
O smoke test nativo do sqlite-vec usa um arquivo de dependências próprio para
|
|
50
|
+
plataformas suportadas: `BUNDLE_GEMFILE=Gemfile.sqlite-vec bundle install` e
|
|
51
|
+
depois `MXRB_SQLITE_VEC=1 BUNDLE_GEMFILE=Gemfile.sqlite-vec bundle exec rspec
|
|
52
|
+
spec/semantic_search_spec.rb`. Assim o lockfile principal continua portátil,
|
|
53
|
+
mas o CI testa a extensão real.
|
|
54
|
+
|
|
55
|
+
[Voltar ao índice](README.md)
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Team Server
|
|
2
|
+
|
|
3
|
+
O MXRB integra diretamente com o Team Server Git e com a App Repository API.
|
|
4
|
+
Nenhum comando usa `mx`, Studio Pro ou o Model SDK como intermediário.
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
mxrb team-server login --pat-file /caminho/seguro/team-server.env
|
|
8
|
+
mxrb team-server projects --pat-file /caminho/seguro/team-server.env
|
|
9
|
+
mxrb team-server info a9e4af8a-2776-4b10-a471-8c42df8f5f43
|
|
10
|
+
mxrb team-server branches a9e4af8a-2776-4b10-a471-8c42df8f5f43
|
|
11
|
+
mxrb team-server clone \
|
|
12
|
+
https://git.api.mendix.com/a9e4af8a-2776-4b10-a471-8c42df8f5f43.git \
|
|
13
|
+
./app
|
|
14
|
+
mxrb team-server pull ./app
|
|
15
|
+
mxrb team-server push ./app --branch main
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
`projects` pagina a Projects API oficial e retorna todos os projetos da empresa.
|
|
19
|
+
O cliente preserva o PAT apenas no mesmo host HTTPS e corrige com segurança o
|
|
20
|
+
redirect HTTP anunciado pelo serviço somente quando origem e destino têm o
|
|
21
|
+
mesmo host HSTS.
|
|
22
|
+
|
|
23
|
+
## Credenciais
|
|
24
|
+
|
|
25
|
+
O modo recomendado armazena somente o caminho absoluto do arquivo informado em
|
|
26
|
+
`~/.config/mxrb/credentials`. O arquivo pode ser texto puro, JSON com
|
|
27
|
+
`team_server_pat`, ou `.env`:
|
|
28
|
+
|
|
29
|
+
```dotenv
|
|
30
|
+
MXRB_TEAM_SERVER_PAT=seu_pat
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Também é possível definir `MXRB_TEAM_SERVER_PAT_FILE` sem executar `login`.
|
|
34
|
+
Se nenhum arquivo for configurado, operações Git usam o credential helper do
|
|
35
|
+
próprio usuário. A App Repository API exige um arquivo PAT.
|
|
36
|
+
|
|
37
|
+
O PAT nunca é incluído na URL, nos argumentos do processo ou no `.git/config`.
|
|
38
|
+
Durante operações Git ele é entregue por um `GIT_ASKPASS` temporário, apagado
|
|
39
|
+
imediatamente ao final.
|
|
40
|
+
|
|
41
|
+
Escopos:
|
|
42
|
+
|
|
43
|
+
- leitura: `mx:modelrepository:repo:read`;
|
|
44
|
+
- push: `mx:modelrepository:repo:write`.
|
|
45
|
+
|
|
46
|
+
## Limites oficiais
|
|
47
|
+
|
|
48
|
+
A Mendix informa que clones feitos fora do Studio Pro não recebem todo o
|
|
49
|
+
pós-processamento e metadados de revisão adicionados pelo Studio Pro. O MXRB
|
|
50
|
+
valida estruturalmente cada MPR após clone e pull, mas commits externos ainda
|
|
51
|
+
podem não conter metadados exigidos pelo deploy no Mendix Cloud. O compilador e
|
|
52
|
+
runtime próprios do MXRB não dependem desses metadados de Cloud.
|
|
53
|
+
|
|
54
|
+
## Aceitação real
|
|
55
|
+
|
|
56
|
+
O repositório `a9e4af8a-2776-4b10-a471-8c42df8f5f43` foi consultado pela App
|
|
57
|
+
Repository API e clonado por HTTPS. O MXRB validou `MyFirstModule.mpr`, detectou
|
|
58
|
+
a branch `main` e confirmou que o remote permaneceu sem PAT embutido. O arquivo
|
|
59
|
+
temporário usado na aceitação foi destruído ao final.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Matriz de validação do MXRB
|
|
2
|
+
|
|
3
|
+
**Português** · [English](../en-US/validation-matrix.md) · [Deutsch](../de-DE/validation-matrix.md)
|
|
4
|
+
|
|
5
|
+
Última atualização: 5 de agosto de 2026.
|
|
6
|
+
|
|
7
|
+
O pipeline validado é:
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
MPR original → validate → export → generate → validate → compare
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Os originais nunca são modificados.
|
|
14
|
+
|
|
15
|
+
| Projeto | Mendix | Formato | Resultado |
|
|
16
|
+
|---|---:|---|---|
|
|
17
|
+
| QueryApiBlogPost | 7.17.0-rc5 | v1 | passou |
|
|
18
|
+
| Sudoku | 11.12.1 | v2 | passou; 409 `.mxunit` |
|
|
19
|
+
| MendixApp | 9.6.1 | v1 | passou |
|
|
20
|
+
| ConnectorKitDemo | 7.5.0 | v1 | passou |
|
|
21
|
+
| TreeviewDemo | 5.21.4 | v1 | passou |
|
|
22
|
+
| GridViewPlayground | 6.10.8 | v1 | passou |
|
|
23
|
+
|
|
24
|
+
## Cobertura profunda editável
|
|
25
|
+
|
|
26
|
+
O comparador cobre metadados, segurança, árvore de units, entidades, access
|
|
27
|
+
rules, associações, páginas, widgets, eventos, menus e corpos completos de
|
|
28
|
+
microflows/nanoflows. UUIDs e coordenadas visuais são normalizados.
|
|
29
|
+
|
|
30
|
+
Os 264 corpos de flows da matriz são emitidos como Ruby tipado. As 133 páginas
|
|
31
|
+
contêm 1.304 nós de 25 tipos; estruturas profundas permanecem hashes Ruby
|
|
32
|
+
editáveis. Toda unit nativa mantém o baseline JSON e também é expandida em
|
|
33
|
+
`.mxrb/native_units.rb`, inclusive conteúdo sem DSL concisa.
|
|
34
|
+
|
|
35
|
+
## Validação oficial 11.12.1
|
|
36
|
+
|
|
37
|
+
- `mx show-version` reconheceu o MPR reconstruído;
|
|
38
|
+
- `mx check` terminou com **0 erros**;
|
|
39
|
+
- original e reconstruído: **23 warnings, 1 depreciação e 6 recomendações**;
|
|
40
|
+
- `mxbuild --target=package`: **BUILD SUCCEEDED**;
|
|
41
|
+
- MDA atual: 11.941.148 bytes, SHA-256
|
|
42
|
+
`fc4fb7a2ea2b4ad7cdb0fcd3296a5dbb5c4d148371aad997ab0032d2c5c0cf33`.
|
|
43
|
+
|
|
44
|
+
## Validação oficial Mendix 5–9
|
|
45
|
+
|
|
46
|
+
O projeto 6.10 gerou MDA no original e reconstruído. As versões 7.5 e 7.17
|
|
47
|
+
chegaram à compilação Java com os mesmos erros de dependências dos originais.
|
|
48
|
+
O 9.6.1 manteve paridade de 896 diagnósticos. O 5.21 exato depende de WPF e
|
|
49
|
+
Windows; sua paridade foi verificada pelo conversor oficial 6.10 em memória.
|
|
50
|
+
|
|
51
|
+
## Limite de confiança
|
|
52
|
+
|
|
53
|
+
A matriz prova os cenários inspecionados, não compatibilidade universal com
|
|
54
|
+
todo metamodelo Mendix. Encodings `.mxunit` desconhecidos são rejeitados em vez
|
|
55
|
+
de adivinhados. A validação exata do 5.21 em Studio Pro/Windows continua sendo
|
|
56
|
+
um limite explícito.
|
|
57
|
+
|
|
58
|
+
## Índice semântico
|
|
59
|
+
|
|
60
|
+
Os seis MPRs produziram **1.778 artefatos** e **3.387 referências**. Consultas
|
|
61
|
+
de referências, callers, callees, impacto, lint e diff tipado foram exercitadas
|
|
62
|
+
sem MDL.
|
|
63
|
+
|
|
64
|
+
## Avaliações, cobertura e runtime
|
|
65
|
+
|
|
66
|
+
- 1.039 exemplos, zero falhas;
|
|
67
|
+
- 100% das linhas: 17.224/17.224;
|
|
68
|
+
- 100% dos branches: 6.811/6.811;
|
|
69
|
+
- avaliação Sudoku: 7/7 checks;
|
|
70
|
+
- testes funcionais Sudoku: 3/3 localmente em 34,16 s;
|
|
71
|
+
- testes funcionais Sudoku: 3/3 no Docker em 39,52 s.
|
|
72
|
+
|
|
73
|
+
Asserções Ruby verificam retorno e contagens XPath persistidas: Games 1/2/3 e
|
|
74
|
+
Cells 81/162/243. JUnit XML é apenas relatório opcional gerado em Ruby.
|
|
75
|
+
|
|
76
|
+
O gate 11.12.1 agora inclui navegador Chromium autenticado: login, navegação
|
|
77
|
+
Home/Orders, captura determinística de DOM/layout/estilo/ARIA, screenshots,
|
|
78
|
+
comparação SHA-256 com baseline explícito, detecção de erros de widget/Runtime
|
|
79
|
+
e logout real. Os scaffolds `page --chain` também materializam e passam
|
|
80
|
+
preflight nos três caminhos suportados; `page --template` foi exercitado em
|
|
81
|
+
Runtime para dashboard e formulário vertical com CSS computado auditado.
|
|
82
|
+
|
|
83
|
+
`script/validate_matrix` repetiu os seis round-trips, 1.506 units, em 14,760 s.
|
|
84
|
+
`script/benchmark` mediu o pipeline Sudoku completo em 6,8463 s. O fuzzing
|
|
85
|
+
determinístico cobre 250 documentos BSON aninhados e 50 arquivos `.mxunit`
|
|
86
|
+
atômicos, inclusive valores binários.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Aceitação end-to-end do VetClinic
|
|
2
|
+
|
|
3
|
+
O projeto de aceitação foi removido e recriado do zero com `mxrb init`. Todos
|
|
4
|
+
os geradores foram exercitados antes do preenchimento das regras de negócio:
|
|
5
|
+
entidades, enumerações, use cases, validações, queries, repository, constante,
|
|
6
|
+
scheduled event, apresentação, página, nanoflow, segurança, integrações, REST,
|
|
7
|
+
Java Action, design, CI, teste funcional e avaliação arquitetural.
|
|
8
|
+
|
|
9
|
+
## Resultado dos gates
|
|
10
|
+
|
|
11
|
+
- validação estrutural MXRB: aprovada;
|
|
12
|
+
- lint semântico: 0 erros e 0 avisos;
|
|
13
|
+
- avaliação arquitetural: 100%;
|
|
14
|
+
- `mx check` oficial Mendix 11.12.1: 0 erros;
|
|
15
|
+
- `mxbuild`: build concluído e pacote MDA gerado;
|
|
16
|
+
- Runtime Mendix sincronizado: teste funcional `ACT_CreateAnimal` aprovado;
|
|
17
|
+
- regressão do MXRB: 622 exemplos, 0 falhas;
|
|
18
|
+
- cobertura: 100% de linhas e 100% de branches;
|
|
19
|
+
- RuboCop: 0 infrações.
|
|
20
|
+
|
|
21
|
+
O modelo cobre enumerações, seis entidades de negócio, generalização de
|
|
22
|
+
`System.User`, membros de sistema, regras de acesso, índices simples e
|
|
23
|
+
compostos, associações N:1, N:N e 1:1, microflows, nanoflow, página, navegação e
|
|
24
|
+
scheduled event.
|
|
25
|
+
|
|
26
|
+
## Trabalho que continua intencionalmente manual
|
|
27
|
+
|
|
28
|
+
Scaffold é estrutura, não especificação de negócio. Foi necessário escrever
|
|
29
|
+
atributos, regras, ações dos fluxos, valores de enumeração, permissões, teste e
|
|
30
|
+
avaliação. O VetClinic original teve a navegação conectada no `project.rb`;
|
|
31
|
+
depois desse aceite, `init` passou a criar perfil, layout e Home mínimos. Itens
|
|
32
|
+
de menu adicionais ainda não têm comando próprio. Página, integrações e
|
|
33
|
+
endpoints também exigem conteúdo real.
|
|
34
|
+
|
|
35
|
+
`published-rest`, `consumed-rest` e `java-action` produzem adaptadores de
|
|
36
|
+
microflow compiláveis. Um documento REST publicado/consumido ou Java Action
|
|
37
|
+
nativo ainda requer um baseline exportado ou Studio Pro. Isso não impede a
|
|
38
|
+
validade e o build do MPR aceito, mas delimita honestamente o alcance atual
|
|
39
|
+
desses três scaffolds.
|
|
40
|
+
|
|
41
|
+
## Correções orientadas pelo aceite
|
|
42
|
+
|
|
43
|
+
O ciclo oficial revelou e corrigiu serialização moderna de projeto, módulo,
|
|
44
|
+
domain model, entidades, atributos, enumerações, associações, acesso, índices,
|
|
45
|
+
navegação, páginas, flows, scheduled events e textos; também corrigiu colisão
|
|
46
|
+
entre artefatos homônimos, referências de enum, role administrativa mínima,
|
|
47
|
+
cache/índice semântico e marcação de entry points. O writer passou a partir de
|
|
48
|
+
um seed oficial versionado e preserva os metadados obrigatórios do Mendix.
|
|
49
|
+
Um smoke test independente confirmou que o scaffold vazio atual também passa
|
|
50
|
+
em `mx check` e MxBuild sem edição manual.
|