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,73 @@
|
|
|
1
|
+
# Relatório de qualidade do build e Runtime nativos
|
|
2
|
+
|
|
3
|
+
Data: 5 de agosto de 2026.
|
|
4
|
+
|
|
5
|
+
## Resultado confirmado
|
|
6
|
+
|
|
7
|
+
- nenhuma etapa funcional chama `mx`, `mxbuild`, `mxcli`, Studio Pro ou Model SDK;
|
|
8
|
+
- build limpo de 12 estágios e geração web passaram em 6.10.8 (39 páginas), 7.5.0 (45), 7.17.0 (66), 9.6.1.29396 (90), 10.24.0.73019 (cliente otimizado) e 11.12.1;
|
|
9
|
+
- a matriz de round-trip passou em seis fixtures reais de 5.21.4 a 11.12.1: 1.506 units, 1.734 artefatos e 3.388 referências;
|
|
10
|
+
- schemas/seeds auditados do compilador cobrem 6.x, 7.x, 9.x, 10.x e 11.x. 5.x e 8.x falham fechadas na compilação nativa; a Runtime exige o patch exato;
|
|
11
|
+
- Data Grid 1 cobre database/XPath/microflow, pesquisa, ordenação, paginação, seleção e botões auditados. Data Grid 2 cobre XPath, colunas de atributo e ação create;
|
|
12
|
+
- perfis web: Dojo em 6/7, híbrido Dojo/React em 9, clássico/otimizado conforme o projeto em 10 e React em 11;
|
|
13
|
+
- a Projects API inventariou 130 apps. Três projetos Git reais (`MyFirstModule`, `LearnNow Trainning Management` e `SLATaskApp`) passaram validate → export → generate → validate → compare;
|
|
14
|
+
- `MyFirstModule` foi regenerado como 11.12.1 exato sem builders proprietários. A Runtime sincronizou 655 operações, criou o administrador `mx` ativo, serviu shell React e login estilizado em `127.0.0.1:18080` e expôs as tabelas esperadas;
|
|
15
|
+
- uma aplicação 10.24.0.73019 com cliente otimizado, criada do zero, passou no `mx check` e `mxbuild` oficiais, modelo/Java/Rollup/pacote portátil nativos, 460 operações de sincronização, probe de prontidão e HTTP 200;
|
|
16
|
+
- QA autenticado em Chromium passou repetidamente em Home e Orders, com
|
|
17
|
+
snapshots DOM/layout/estilo/ARIA e screenshots determinísticos, zero erros de
|
|
18
|
+
console e baseline SHA-256 explícito;
|
|
19
|
+
- `mxrb page new|generate|g Module.Page --chain ...` materializa MPRs válidos
|
|
20
|
+
para `page:microflow`, `page:nanoflow` e `page:nanoflow:microflow`; sem a
|
|
21
|
+
opção, o scaffold mínimo de página permanece inalterado;
|
|
22
|
+
- `mxrb page templates` expõe a árvore starter/blank/dashboard/form-vertical;
|
|
23
|
+
`--template` combina os modelos com as chains, e dashboard/form-vertical
|
|
24
|
+
passaram em Runtime real com tema compilado e zero erros de console;
|
|
25
|
+
- QA final: 1.039 exemplos, zero falhas, 100,00% de linhas (17.224/17.224), 100,00% de branches (6.811/6.811) e RuboCop limpo em 244 arquivos.
|
|
26
|
+
|
|
27
|
+
## Correções do relatório de melhorias
|
|
28
|
+
|
|
29
|
+
- geração seletiva de proxies Java para entidades, herança, enumerações e constantes usadas pelo Java customizado;
|
|
30
|
+
- lowering da extensão oficial do Database Connector para Java actions do External Database Connector, inclusive `SELECT` seguro do query builder;
|
|
31
|
+
- fontes OQL, flags herdadas de persistência, roles de demo user, system texts e storage/access rights exatos;
|
|
32
|
+
- readiness estável do PostgreSQL, porta pública loopback (`--runtime-port`), senha administrativa por ambiente e criação do admin;
|
|
33
|
+
- recursos de login autossuficientes, placeholders renderizados, cache busting, estilo e i18n;
|
|
34
|
+
- hidratação do Atlas CSS, manifest e assets públicos; a homepage real do Team
|
|
35
|
+
Server agora renderiza grids, títulos e botões React acionáveis;
|
|
36
|
+
- imports de página no modo developer carregam o token da sessão; o chunk
|
|
37
|
+
corrigido recebe hash de conteúdo e a autoimportação do Rspack compartilha o
|
|
38
|
+
token do entrypoint, eliminando a homepage branca obsoleta sem desabilitar cache;
|
|
39
|
+
- o shell gerado fornece um adaptador limitado de `openForm` sobre `openForm2`,
|
|
40
|
+
para que handlers antigos em cache naveguem em vez de falhar silenciosamente
|
|
41
|
+
sem disparar request para a Runtime;
|
|
42
|
+
- a Gallery React oficial agora renderiza dados XPath e microflow, templates de
|
|
43
|
+
item, seleção e valores string/numéricos formatados. O QA autenticado mostrou
|
|
44
|
+
título, descrição, `90 day(s)` e `49.95`; a Gallery vazia de Teachers
|
|
45
|
+
permaneceu presente na estrutura;
|
|
46
|
+
- fontes nanoflow de lista/objeto e ações de botão agora compilam para os
|
|
47
|
+
contratos reais do cliente Mendix e programas de instruções referenciados por
|
|
48
|
+
função. O subconjunto auditado do grafo inclui decisões, caminhos de erro,
|
|
49
|
+
nanoflows aninhados, ações JavaScript e chamadas de microflow servidor; nós
|
|
50
|
+
não suportados falham fechado em vez de serem tratados como microflows;
|
|
51
|
+
- o workspace PostgreSQL injeta a JDBC URL coerente e a opção de SSL no Runtime;
|
|
52
|
+
papéis de navegação em `CheckNothing`, modos de scroll, SidebarToggle e as
|
|
53
|
+
constantes de retorno de data sources de microflow seguem os contratos reais
|
|
54
|
+
observados no cliente 11.12.1;
|
|
55
|
+
- cliques reais no navegador validaram Home → Courses → Add → Save. Formulários
|
|
56
|
+
DataView/TextBox por parâmetro renderizam e persistem valores; create passa o
|
|
57
|
+
GUID por `openForm2`, enquanto a autorização de commit/rollback deriva dos
|
|
58
|
+
module roles da página. O PostgreSQL confirmou os quatro valores de QA salvos;
|
|
59
|
+
- proteção contra traversal em templates/imagens/ZIP, identificadores inseguros e symlinks nos inputs nativos;
|
|
60
|
+
- comparação normaliza defaults booleanos ausentes do Runtime, restaurando round-trips legados exatos.
|
|
61
|
+
|
|
62
|
+
## Limites explícitos
|
|
63
|
+
|
|
64
|
+
1. Widgets Dojo além do Data Grid 1 permanecem listados em `web/mxrb-legacy-pages.json`; não são declarados renderizados.
|
|
65
|
+
2. Data Grid 2 cobre o subconjunto auditado XPath/atributo/create. Gallery cobre
|
|
66
|
+
XPath/microflow e o subconjunto auditado do grafo nanoflow. Formatos de grafo
|
|
67
|
+
não suportados, referências ausentes, mapeamentos de parâmetros inseguros e
|
|
68
|
+
instruções cliente não traduzidas ainda falham fechado.
|
|
69
|
+
3. As distribuições 6/7/9 instaladas têm bundles exatos, mas não launcher compatível. O launcher 11 exige Java 21 e não inicia 9 com segurança no Java 11. O `db up` legado falha fechado; boot exato é afirmado somente para 10.24.0.73019 e 11.12.1.
|
|
70
|
+
4. A Runtime usa licença local trial/developer e emite o aviso esperado de limite de tempo.
|
|
71
|
+
5. Build/Deploy/Pipelines/Backups em nuvem são verificações externas opcionais, nunca dependências do build/runtime nativo.
|
|
72
|
+
|
|
73
|
+
Não existe fallback oculto para `mx`/`mxbuild`.
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
# OQL, visão SQL e banco local
|
|
2
|
+
|
|
3
|
+
O MXRB só expõe OQL quando o modelo nativo realmente contém OQL. A descoberta
|
|
4
|
+
abrange fontes OQL de datasets e consultas de view entities; um aplicativo sem
|
|
5
|
+
OQL retorna uma coleção vazia e não recebe documentos de consulta artificiais.
|
|
6
|
+
|
|
7
|
+
## Inspeção estática
|
|
8
|
+
|
|
9
|
+
```ruby
|
|
10
|
+
Mxrb.open("Shop.mpr") do |project|
|
|
11
|
+
next unless project.oql?
|
|
12
|
+
|
|
13
|
+
project.oql_queries.each do |query|
|
|
14
|
+
puts query.qualified_name
|
|
15
|
+
puts query.oql
|
|
16
|
+
puts query.parameters
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
project.oql_sql_views(dialect: :postgresql).each do |view|
|
|
20
|
+
puts view.sql if view.supported?
|
|
21
|
+
warn view.warnings.join("\n")
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
A CLI fornece o mesmo resultado tipado:
|
|
27
|
+
|
|
28
|
+
```sh
|
|
29
|
+
bundle exec mxrb oql Shop.mpr
|
|
30
|
+
bundle exec mxrb oql Shop.mpr --dialect ansi
|
|
31
|
+
bundle exec mxrb oql Shop.mpr --dialect sql_server --json
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
A visão SQL é estritamente de leitura. Parâmetros como `$Customer` viram binds
|
|
35
|
+
nomeados como `:Customer`; valores nunca são interpolados. Literais de texto e
|
|
36
|
+
comentários permanecem opacos. Múltiplas instruções e operações OQL de escrita
|
|
37
|
+
são recusadas.
|
|
38
|
+
|
|
39
|
+
O SQL gerado tem confiança `logical`. As visões PostgreSQL e SQL Server usam a
|
|
40
|
+
forma convencional de tabela `module$entity`; ANSI preserva `Module.Entity`.
|
|
41
|
+
Os nomes físicos devem ser conferidos no banco criado pelo Runtime Mendix
|
|
42
|
+
exato. Joins por caminho de associação são declarados não suportados enquanto
|
|
43
|
+
os metadados de armazenamento do Runtime não puderem provar o join correto.
|
|
44
|
+
|
|
45
|
+
## Análise dialect-aware
|
|
46
|
+
|
|
47
|
+
`Oql::Analyzer` encontra padrões de custo e portabilidade na fonte original,
|
|
48
|
+
preserva o fragmento para highlight e devolve sugestões para PostgreSQL, SQL
|
|
49
|
+
Server e ANSI:
|
|
50
|
+
|
|
51
|
+
```ruby
|
|
52
|
+
report = Mxrb::Oql::Analyzer.new(dialect: :postgresql)
|
|
53
|
+
.analyze_source("SELECT * FROM Sales.Order")
|
|
54
|
+
report.findings.each { puts "#{_1.rule}: #{_1.suggestions[:postgresql]}" }
|
|
55
|
+
|
|
56
|
+
reports = Mxrb.open("Shop.mpr") { _1.oql_analysis(dialect: :postgresql) }
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
As regras cobrem wildcard inicial, wildcard dos dois lados, busca por prefixo,
|
|
60
|
+
`LOWER`/`UPPER`/`CAST` no `WHERE`, produto cartesiano e `SELECT *`. Findings
|
|
61
|
+
são `hint`, `warning` ou `error`; `clean?` indica ausência de erros.
|
|
62
|
+
|
|
63
|
+
O CLI analisa OQL nativo e fontes ad-hoc tanto OQL quanto SQL:
|
|
64
|
+
|
|
65
|
+
```sh
|
|
66
|
+
bundle exec mxrb analyze Shop.mpr --dialect postgresql
|
|
67
|
+
bundle exec mxrb analyze --oql "SELECT * FROM Sales.Order"
|
|
68
|
+
bundle exec mxrb analyze --sql "SELECT * FROM sales$order" --json
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Plano real e performance do banco
|
|
72
|
+
|
|
73
|
+
A análise estática não prova qual caminho o otimizador escolherá. No workspace
|
|
74
|
+
PostgreSQL materializado, o MXRB também consulta o planner real em JSON e cruza
|
|
75
|
+
as relações do plano com `pg_indexes`:
|
|
76
|
+
|
|
77
|
+
```sh
|
|
78
|
+
bundle exec mxrb db explain Shop.mpr \
|
|
79
|
+
"SELECT * FROM \"sales$order\" WHERE status = 'Open'"
|
|
80
|
+
bundle exec mxrb db explain Shop.mpr \
|
|
81
|
+
"SELECT * FROM \"sales$order\" WHERE status = 'Open'" --analyze --json
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
O modo padrão usa `EXPLAIN` e não executa a consulta. `--analyze` é explícito
|
|
85
|
+
porque usa `EXPLAIN ANALYZE`; a consulta é executada com o papel read-only e
|
|
86
|
+
inclui tempos e buffers. O relatório distingue scans sequenciais pequenos, que
|
|
87
|
+
podem ser ótimos, de scans grandes; também sinaliza muitas linhas descartadas
|
|
88
|
+
pelo filtro, estimativa de cardinalidade divergente, nested loops volumosos e
|
|
89
|
+
sorts que foram para disco. Índices existentes são mostrados como evidência,
|
|
90
|
+
mas o MXRB não inventa `CREATE INDEX` sem conhecer seletividade e workload.
|
|
91
|
+
|
|
92
|
+
O workload cumulativo do PostgreSQL também pode ser inspecionado:
|
|
93
|
+
|
|
94
|
+
```sh
|
|
95
|
+
bundle exec mxrb db workload Shop.mpr --limit 50
|
|
96
|
+
bundle exec mxrb db workload Shop.mpr --limit 50 --json
|
|
97
|
+
bundle exec mxrb db workload Shop.mpr --save .mxrb/workload.json
|
|
98
|
+
bundle exec mxrb db workload Shop.mpr --compare .mxrb/workload.json
|
|
99
|
+
bundle exec mxrb db indexes Shop.mpr --limit 50
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
O workspace habilita `pg_stat_statements` e `track_io_timing`. O relatório
|
|
103
|
+
ordena fingerprints por custo acumulado e analisa latência média, cache hit,
|
|
104
|
+
I/O, blocos temporários e linhas por chamada. Estatísticas de tabelas revelam
|
|
105
|
+
pressão de scans sequenciais; índices não únicos grandes e sem scans observados
|
|
106
|
+
também são sinalizados. Como essas métricas são cumulativas desde o reset, uma
|
|
107
|
+
remoção de índice nunca é sugerida sem confirmar janela e workload reais.
|
|
108
|
+
O baseline permite comparar custo acumulado e latência entre execuções; o
|
|
109
|
+
advisor cruza queries, filtros, estatísticas de tabelas e índices existentes.
|
|
110
|
+
Ele retorna candidatos com evidência e confiança, além de sobreposições, mas
|
|
111
|
+
não aplica DDL automaticamente.
|
|
112
|
+
|
|
113
|
+
Para um deployment SQL Server, a conexão é explícita e usa `sqlcmd`:
|
|
114
|
+
|
|
115
|
+
```sh
|
|
116
|
+
export MXRB_SQLSERVER_PASSWORD='segredo'
|
|
117
|
+
bundle exec mxrb db explain Shop.mpr \
|
|
118
|
+
"SELECT * FROM dbo.[Order] WHERE Status = 'Open'" \
|
|
119
|
+
--engine sql_server --server db.example:1433 \
|
|
120
|
+
--database Shop --user mxrb_analyst --json
|
|
121
|
+
bundle exec mxrb db workload Shop.mpr --engine sql_server \
|
|
122
|
+
--server db.example:1433 --database Shop --user mxrb_analyst --limit 50
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
O modo estimado usa `SHOWPLAN_XML`; `--analyze` usa `STATISTICS XML` e executa
|
|
126
|
+
somente um `SELECT`/`WITH`. O parser detecta table/clustered scans grandes,
|
|
127
|
+
nested loops volumosos, spills para tempdb, divergência de cardinalidade e
|
|
128
|
+
hints de missing index. Esses hints permanecem hipóteses do otimizador, não
|
|
129
|
+
DDL automático. A senha vai em `SQLCMDPASSWORD`, nunca em argv. O engine não é
|
|
130
|
+
inferido do MPR porque pertence à configuração do deployment.
|
|
131
|
+
|
|
132
|
+
## PostgreSQL local materializado
|
|
133
|
+
|
|
134
|
+
O MPR contém o modelo da aplicação, não um snapshot dos dados. O Runtime Mendix
|
|
135
|
+
é responsável pelo esquema do banco e por sincronizá-lo a partir do modelo. O
|
|
136
|
+
MXRB pode compilar o Runtime portátil exato, iniciar um PostgreSQL isolado,
|
|
137
|
+
permitir essa sincronização e expor acesso SQL:
|
|
138
|
+
|
|
139
|
+
```sh
|
|
140
|
+
bundle exec mxrb db up Shop.mpr
|
|
141
|
+
bundle exec mxrb db status Shop.mpr
|
|
142
|
+
bundle exec mxrb db sql Shop.mpr \
|
|
143
|
+
'SELECT * FROM "sales$order" LIMIT 20'
|
|
144
|
+
bundle exec mxrb db shell Shop.mpr
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
Depois de alterar o MPR, recompile e sincronize preservando os dados:
|
|
148
|
+
|
|
149
|
+
```sh
|
|
150
|
+
bundle exec mxrb db sync Shop.mpr
|
|
151
|
+
bundle exec mxrb db down Shop.mpr
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
`db down` para os containers, mas preserva o volume PostgreSQL. Um novo
|
|
155
|
+
`db up` reutiliza o pacote em cache e os dados. A porta padrão é
|
|
156
|
+
`127.0.0.1:55432` e pode ser alterada com `--port`.
|
|
157
|
+
|
|
158
|
+
Para ferramentas locais, o mesmo workspace pode ser exposto como JSON HTTP:
|
|
159
|
+
|
|
160
|
+
```sh
|
|
161
|
+
bundle exec mxrb serve Shop.mpr --port 4567
|
|
162
|
+
curl -X POST http://127.0.0.1:4567/query \
|
|
163
|
+
-H 'Content-Type: application/json' \
|
|
164
|
+
-d '{"sql":"SELECT * FROM \"sales$order\" LIMIT 20"}'
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
O corpo aceita exatamente um campo `sql` ou `oql`. OQL ad-hoc passa pelo
|
|
168
|
+
tradutor PostgreSQL seguro; consultas parametrizadas e qualquer instrução que
|
|
169
|
+
não seja um único `SELECT`/`WITH` são rejeitadas. A resposta inclui `rows`,
|
|
170
|
+
`row_count`, `elapsed_ms`, avisos ou um erro estruturado. O servidor escuta
|
|
171
|
+
somente em loopback, usa `mxrb_reader` e prepara o workspace por padrão;
|
|
172
|
+
`--no-up` reutiliza um workspace já ativo.
|
|
173
|
+
|
|
174
|
+
A limpeza permanente é deliberadamente explícita:
|
|
175
|
+
|
|
176
|
+
```sh
|
|
177
|
+
bundle exec mxrb db destroy Shop.mpr --yes
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Ela remove apenas recursos com o rótulo de propriedade correspondente do MXRB.
|
|
181
|
+
|
|
182
|
+
## Fronteira de segurança
|
|
183
|
+
|
|
184
|
+
- O PostgreSQL só escuta na interface de loopback.
|
|
185
|
+
- Cada caminho absoluto de MPR recebe containers, rede, volume e estado
|
|
186
|
+
separados.
|
|
187
|
+
- Credenciais aleatórias ficam no diretório de estado XDG do usuário, fora do
|
|
188
|
+
repositório e com modo `0600`.
|
|
189
|
+
- `db sql`, `db shell` e `db url` usam `mxrb_reader`, cujas transações e
|
|
190
|
+
configuração do papel são somente leitura.
|
|
191
|
+
- `mxrb_reader` recebe `pg_read_all_stats` no workspace isolado para correlacionar
|
|
192
|
+
fingerprints do Runtime; isso não concede escrita em dados da aplicação.
|
|
193
|
+
- `--write` seleciona explicitamente o papel proprietário do Runtime. Escritas
|
|
194
|
+
diretas podem violar invariantes Mendix e devem ser excepcionais.
|
|
195
|
+
- O workspace PostgreSQL nunca aponta para banco remoto existente. A análise
|
|
196
|
+
SQL Server é uma conexão de deployment separada e explícita; use um login
|
|
197
|
+
somente leitura com permissão de SHOWPLAN. A senha fica em variável de
|
|
198
|
+
ambiente e keywords de mutação são rejeitadas, inclusive em CTEs.
|
|
199
|
+
|
|
200
|
+
O toolchain Mendix exato e o daemon Docker precisam estar disponíveis.
|
|
201
|
+
Para planos SQL Server, `sqlcmd` precisa estar instalado.
|
|
202
|
+
Sincronizações de esquema podem alterar ou rejeitar dados existentes quando o
|
|
203
|
+
modelo muda; faça backup de volumes locais valiosos antes de migrações de risco.
|
|
204
|
+
|
|
205
|
+
Consulte a documentação oficial sobre
|
|
206
|
+
[OQL](https://docs.mendix.com/refguide/oql/),
|
|
207
|
+
[armazenamento de dados](https://docs.mendix.com/refguide/data-storage/) e
|
|
208
|
+
[configuração do Runtime](https://docs.mendix.com/refguide/custom-settings/).
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Avaliação de integração das APIs Mendix
|
|
2
|
+
|
|
3
|
+
Data: 1º de agosto de 2026. Fonte: índice oficial de [APIs e SDKs Mendix](https://docs.mendix.com/apidocs-mxsdk/).
|
|
4
|
+
|
|
5
|
+
## Matriz de decisão
|
|
6
|
+
|
|
7
|
+
| API ou SDK | Uso no MXRB | Decisão |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| Projects API | listar apps acessíveis e metadados dos projetos | integrada em `team-server projects`; leitura por padrão |
|
|
10
|
+
| App Repository API | informações do repositório, branches e commits | integrada na descoberta e clone do Team Server |
|
|
11
|
+
| Marketplace Content API | descobrir e baixar módulos/widgets | integrada nas operações de Marketplace |
|
|
12
|
+
| Build API | comparar artefato nativo do MXRB com build oficial em nuvem | verificação opcional; nunca dependência do build nativo |
|
|
13
|
+
| Deploy API v4 | inventariar apps/ambientes antes da validação de release | adaptador somente leitura proposto; mutações exigem confirmação explícita |
|
|
14
|
+
| Pipelines API | iniciar e observar pipeline CI/CD existente | adaptador opt-in proposto, com idempotência e consulta de estado |
|
|
15
|
+
| Backups API v2 | listar/criar/baixar snapshots antes de deployment | adaptador de segurança proposto; restore/delete continuam explícitos |
|
|
16
|
+
| Runtime API 11 | compilar Java e validar contratos do Runtime | contrato para proxies; é API Java, não substituto REST remoto |
|
|
17
|
+
| Client e Pluggable Widget APIs | contratos Dojo/React/Data Grid | referência dos artefatos web gerados, não cliente HTTP |
|
|
18
|
+
| Catalog APIs | registrar/consultar fontes governadas | plugin futuro; fora do núcleo build/runtime |
|
|
19
|
+
| Model/Platform SDKs e extensibilidade do Studio Pro | modelagem remota ou extensão do Studio Pro | não obrigatórios; MXRB continua Ruby/SQLite/BSON independente |
|
|
20
|
+
|
|
21
|
+
## Regras de integração
|
|
22
|
+
|
|
23
|
+
- Chamadas remotas são explícitas; `generate`, `compile`, `validate` e `db up` nunca acessam a Mendix Cloud.
|
|
24
|
+
- PATs/API keys vêm de arquivo protegido ou ambiente e nunca entram em relatórios, logs, projetos ou Git.
|
|
25
|
+
- Leitura é o padrão. Build, deploy, pipeline, restore, membros e exclusões exigem comando próprio e confirmação proporcional ao impacto.
|
|
26
|
+
- A Build API só funciona com apps na Mendix Cloud e usa API key da conta; não substitui o compilador nativo local.
|
|
27
|
+
- APIs versionadas de Runtime/frontend são evidência de compatibilidade. O MXRB mantém schemas/seeds exatos e falha fechado sem contrato ou launcher compatível.
|
|
28
|
+
|
|
29
|
+
## Ordem recomendada
|
|
30
|
+
|
|
31
|
+
1. Listagem de branches/commits do App Repository no `team-server`.
|
|
32
|
+
2. Inventário somente leitura do Deploy e gate opcional de comparação via Build.
|
|
33
|
+
3. Estado/disparo de Pipelines com idempotência e polling limitado.
|
|
34
|
+
4. Proteções de listar/criar/baixar Backups antes de mutação em nuvem.
|
|
35
|
+
|
|
36
|
+
Catalog e extensibilidade do Studio Pro ficam em adaptadores separados, pois não reduzem o risco do núcleo nativo.
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
# Operação, lifecycle e Marketplace
|
|
2
|
+
|
|
3
|
+
## Diagnóstico, benchmark e evolução
|
|
4
|
+
|
|
5
|
+
```sh
|
|
6
|
+
mxrb doctor .
|
|
7
|
+
mxrb doctor . --json
|
|
8
|
+
mxrb benchmark App.mpr --iterations 5 --json
|
|
9
|
+
mxrb project inspect . --json
|
|
10
|
+
mxrb upgrade --mendix 11.12.1 --target .
|
|
11
|
+
mxrb upgrade --mendix 11.12.1 --target . --apply
|
|
12
|
+
mxrb migrate plan .
|
|
13
|
+
mxrb migrate check .
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
`doctor` verifica o projeto Ruby, agregadores, MPR e toolchain disponível.
|
|
17
|
+
`benchmark` mede abertura, construção do índice semântico e validação. Upgrade
|
|
18
|
+
é preview por padrão; `--apply` altera somente a declaração de versão no
|
|
19
|
+
`project.rb`. Migration gera o projeto em área temporária e compara o modelo
|
|
20
|
+
resultante com o MPR atual; `check` retorna erro quando existe drift.
|
|
21
|
+
|
|
22
|
+
## Migração e aceitação do frontend
|
|
23
|
+
|
|
24
|
+
```sh
|
|
25
|
+
mxrb frontend migrate App.mpr --json
|
|
26
|
+
mxrb frontend migrate App.mpr --apply --json
|
|
27
|
+
script/frontend_acceptance App.mpr -o frontend-round-trip.json
|
|
28
|
+
script/frontend_acceptance App.mpr --mxbuild /caminho/mxbuild -o frontend.json
|
|
29
|
+
script/frontend_acceptance App.mpr --mx /caminho/mx -o frontend-diagnostics.json
|
|
30
|
+
script/frontend_lifecycle_acceptance --version 11.12.1 --mx /caminho/mx \
|
|
31
|
+
--mxbuild /caminho/mxbuild --strict-warnings -o frontend-lifecycle.json
|
|
32
|
+
script/frontend_browser_acceptance --scenario examples/frontend-browser-scenario.json \
|
|
33
|
+
--url http://127.0.0.1:18080 --password-file /caminho/credentials.json \
|
|
34
|
+
--baseline examples/frontend-browser-baseline-11.12.1.json
|
|
35
|
+
script/frontend_browser_acceptance --scenario examples/page-chain-browser-scenario.json \
|
|
36
|
+
--url http://127.0.0.1:18080 --password-file /caminho/credentials.json
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
`mxrb frontend migrate` é uma prévia imutável e fail-closed por padrão. Para
|
|
40
|
+
Mendix 10 e 11, planeja a atualização dos schemas dos pluggable widgets
|
|
41
|
+
instalados, dos pesos legados de linhas de layout e das design properties a
|
|
42
|
+
partir do XML do pacote. `--apply` grava somente um plano seguro em uma única
|
|
43
|
+
transação no MPR; propriedades configuradas desconhecidas, geração não
|
|
44
|
+
suportada ou unit alterada depois da prévia bloqueiam a escrita. Nem a prévia
|
|
45
|
+
nem a aplicação executam ferramentas Mendix.
|
|
46
|
+
|
|
47
|
+
`script/frontend_acceptance` é o gate reproduzível de 10/11. Ele valida os MPRs
|
|
48
|
+
de origem e reconstruído, exige preflight nativo compatível em ambos, exporta
|
|
49
|
+
para Ruby e reconstrói, compara a estrutura do modelo e verifica
|
|
50
|
+
inventários completos de assets, bytes, SHA-256 e proveniência do Marketplace.
|
|
51
|
+
A fronteira de proveniência inclui `.mxrb/marketplace.lock.json`, o cache de
|
|
52
|
+
pacotes e `.mxrb/marketplace-originals`; arquivo ausente, alterado ou inesperado
|
|
53
|
+
reprova o gate. A matriz aceita do renderer agora cobre tabelas de Forms,
|
|
54
|
+
`ListViewXPathSource`, propriedades de objeto de listen target, mappings
|
|
55
|
+
estruturados de variáveis de página e enumerações de Combo box. O baseline do
|
|
56
|
+
preflight caiu de 28 para 0 achados no 10.24 e de 20 para 0 no 11.12.
|
|
57
|
+
|
|
58
|
+
Sem `--mxbuild`, o relatório tem escopo `round_trip` e deixa `frontend_ready`
|
|
59
|
+
sem valor. Com `--mxbuild`, o MxBuild atua como oráculo externo somente leitura
|
|
60
|
+
e o escopo passa a `frontend`; ele nunca gera, altera ou repara o projeto.
|
|
61
|
+
O oráculo ao vivo só aceita sucesso quando o MxBuild termina com status zero e
|
|
62
|
+
produz um MDA não vazio; falha não zero da toolchain sem erros de modelo
|
|
63
|
+
registrados falha fechada em vez de certificar um modelo limpo.
|
|
64
|
+
Em 4 de agosto de 2026, a migração segura concluiu a matriz aceita 10.24.0.73019 e
|
|
65
|
+
11.12.1: origem e reconstrução retornaram zero erros no MxBuild e os dois
|
|
66
|
+
relatórios marcaram `frontend_ready` como `true`.
|
|
67
|
+
|
|
68
|
+
`script/frontend_lifecycle_acceptance` cria um app exclusivamente pela CLI,
|
|
69
|
+
gera o MPR, exporta-o para Ruby, altera a Home e a navegação, adiciona entidade,
|
|
70
|
+
formulário, microflow, nanoflow e asset, gera novamente, exporta uma segunda vez
|
|
71
|
+
e exige reconstrução estruturalmente idêntica. Na matriz oficial 10.24.0.73019
|
|
72
|
+
e 11.12.1, origem e reconstrução concluíram com zero erros, warnings,
|
|
73
|
+
depreciações e recomendações no `mx check`, além de zero erros no MxBuild.
|
|
74
|
+
|
|
75
|
+
`script/frontend_browser_acceptance` controla Chromium por CDP local, autentica
|
|
76
|
+
sem colocar senha na linha de comando, percorre páginas e compara snapshots
|
|
77
|
+
determinísticos de estrutura, geometria, estilos e estado ARIA. Exceções do
|
|
78
|
+
navegador, widgets quebrados e o diálogo genérico de erro do Runtime reprovam o
|
|
79
|
+
gate. `--update-baseline` é explícito; execuções normais apenas comparam. O gate
|
|
80
|
+
faz logout pela API `mx.logout()` e pode ser repetido sob licença trial.
|
|
81
|
+
|
|
82
|
+
O cenário `page-chain-browser-scenario.json` usa uma app `PageChainQa` com
|
|
83
|
+
`DirectOrder`, `ClientOrder` e `HybridOrder`, criadas pelos três valores de
|
|
84
|
+
`page --chain`. Ele aciona `Refresh` em cada página e exige também CSS
|
|
85
|
+
computado — margem do documento, gradiente do cabeçalho e fundo dos cards —,
|
|
86
|
+
portanto HTML funcional sem tema reprova o gate.
|
|
87
|
+
|
|
88
|
+
`--mx` executa o checker oficial somente leitura com warnings, depreciações e
|
|
89
|
+
recomendações de boas práticas. O gate valida o bitmask de saída e compara as
|
|
90
|
+
assinaturas normalizadas de origem e reconstrução. A fixture 10.24 aceita tem
|
|
91
|
+
0 erros, 173 warnings dos pacotes, 0 depreciações e 2 recomendações do Kafka;
|
|
92
|
+
a 11.12 tem 0 erros, 10 warnings dos pacotes, 0 depreciações e as mesmas 2
|
|
93
|
+
recomendações. Os JSONs de origem e reconstrução são idênticos byte a byte nas
|
|
94
|
+
duas gerações; esses diagnósticos observáveis dos pacotes não são drift do MXRB.
|
|
95
|
+
|
|
96
|
+
## Marketplace Mendix oficial e comunitário
|
|
97
|
+
|
|
98
|
+
O MXRB usa a Marketplace Content API documentada pela Mendix. Crie um PAT com
|
|
99
|
+
o escopo `mx:marketplace-content:read` e autentique uma vez:
|
|
100
|
+
|
|
101
|
+
```sh
|
|
102
|
+
cp .env.example .env
|
|
103
|
+
mxrb marketplace login --pat-file .env
|
|
104
|
+
mxrb marketplace search "Community Commons"
|
|
105
|
+
mxrb marketplace show 170
|
|
106
|
+
mxrb marketplace versions 170 --mendix-version 11.12.1
|
|
107
|
+
mxrb marketplace pull 170 --mpr VetClinic.mpr
|
|
108
|
+
mxrb marketplace pull 170@3.4.0 --mpr VetClinic.mpr
|
|
109
|
+
mxrb marketplace dependencies CommunityCommons --mpr VetClinic.mpr
|
|
110
|
+
mxrb marketplace dependencies CommunityCommons --mpr VetClinic.mpr --apply
|
|
111
|
+
mxrb marketplace dependencies CommunityCommons --mpr VetClinic.mpr --apply-resolved
|
|
112
|
+
mxrb marketplace update 170@3.5.0 --mpr VetClinic.mpr
|
|
113
|
+
mxrb marketplace update 170@3.5.0 --mpr VetClinic.mpr --apply
|
|
114
|
+
mxrb marketplace remove CommunityCommons --mpr VetClinic.mpr
|
|
115
|
+
mxrb marketplace remove CommunityCommons --mpr VetClinic.mpr --apply
|
|
116
|
+
mxrb marketplace pull github:mendix/CommunityCommons
|
|
117
|
+
mxrb marketplace import ./CommunityCommons.mpk --mpr VetClinic.mpr
|
|
118
|
+
mxrb marketplace audit --target . --mendix-version 11.12.1
|
|
119
|
+
mxrb marketplace list
|
|
120
|
+
mxrb marketplace verify
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Busca oficial inclui conteúdo público e conteúdo privado da empresa visível ao
|
|
124
|
+
dono do PAT. Os filtros incluem `--private`, `--public`, `--approved` e
|
|
125
|
+
`--published-since AAAA-MM-DD`. `show` apresenta publicador, tipo, suporte,
|
|
126
|
+
licença, privacidade e aprovação. `versions` apresenta compatibilidade, release
|
|
127
|
+
notes e estados `Regular`, `Vulnerable` e `SecurityFix`, incluindo CVE/CWE.
|
|
128
|
+
|
|
129
|
+
`pull` oficial é o padrão: seleciona pela API a versão mais recente compatível
|
|
130
|
+
com o MPR, usa a URL de download retornada pela API e bloqueia versões vulneráveis, salvo uso explícito
|
|
131
|
+
de `--allow-vulnerable`. `github:` continua como fallback e `import` aceita um
|
|
132
|
+
MPK local. Com `--mpr`, o MXRB lê `package.xml` e o `project.mpr` interno, importa
|
|
133
|
+
a árvore completa de units diretamente via Ruby/SQLite/BSON e instala os
|
|
134
|
+
assets declarados. Não executa `mx`, `mxcli`, Studio Pro nem Model SDK. A
|
|
135
|
+
operação preserva IDs, usa transação, restaura assets em falhas e recusa módulo
|
|
136
|
+
duplicado. Pacotes oficiais compatíveis podem avançar para a versão mais nova
|
|
137
|
+
do modelo do projeto; imports locais/GitHub continuam exigindo versão idêntica.
|
|
138
|
+
Quando Atlas Core é instalado, o MXRB conecta suas variáveis Sass legadas sem
|
|
139
|
+
sobrescrever as customizações do projeto.
|
|
140
|
+
|
|
141
|
+
O pacote fica em `.mxrb/marketplace/` e versão, origem, Content ID, Version ID,
|
|
142
|
+
estado de segurança, SHA-256, module ID, units, MPR e assets ficam registrados
|
|
143
|
+
em `.mxrb/marketplace.lock.json`. `audit` consulta atualizações e vulnerabilidades.
|
|
144
|
+
`verify` confere simultaneamente cache, presença do módulo no MPR e assets.
|
|
145
|
+
Sem `--mpr`, o comportamento legado continua disponível para extrair arquivos
|
|
146
|
+
ZIP de repositórios Ruby-first.
|
|
147
|
+
`GITHUB_TOKEN` é opcional para elevar o limite da API pública.
|
|
148
|
+
|
|
149
|
+
```sh
|
|
150
|
+
cp .env.example .env
|
|
151
|
+
# edite .env e defina MXRB_MENDIX_PAT sem versionar o arquivo
|
|
152
|
+
mxrb marketplace login --pat-file .env
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Por padrão recomendado, o login valida o PAT e salva **somente o caminho
|
|
156
|
+
absoluto** do `.env` em `~/.config/mxrb/credentials` (ou
|
|
157
|
+
`$XDG_CONFIG_HOME/mxrb/credentials`). O MXRB não copia, move, altera permissões
|
|
158
|
+
nem reescreve o arquivo apontado; ele o lê quando uma operação oficial precisa
|
|
159
|
+
autenticar. Scaffolds novos já ignoram `.env` e geram `.env.example` sem segredo.
|
|
160
|
+
|
|
161
|
+
Quem preferir armazenamento gerenciado pode executar
|
|
162
|
+
`mxrb marketplace login --store-pat`. Antes de pedir o PAT, o comando informa
|
|
163
|
+
que gravará JSON no arquivo global com permissão `0600`. Também é possível usar
|
|
164
|
+
`MXRB_MENDIX_PAT_FILE=/caminho/.env` sem persistir configuração. Consulte
|
|
165
|
+
`mxrb marketplace login --help` para os formatos e precedência.
|
|
166
|
+
|
|
167
|
+
O token só é enviado aos hosts oficiais exatos
|
|
168
|
+
`marketplace-api.mendix.com` e `marketplace.mendix.com`; ele é removido em
|
|
169
|
+
redirects para qualquer outro host. Consulte a
|
|
170
|
+
[Marketplace Content API](https://docs.mendix.com/apidocs-mxsdk/apidocs/content-api/).
|
|
171
|
+
|
|
172
|
+
`marketplace dependencies` descobre referências qualificadas não resolvidas no
|
|
173
|
+
MPR interno do pacote, resolve o grafo recursivamente pela API oficial, baixa
|
|
174
|
+
cada candidato e só o aceita quando o próprio MPK comprova a identidade do
|
|
175
|
+
módulo solicitado. Módulos pertencentes ao projeto satisfazem referências sem
|
|
176
|
+
serem rotulados como pacotes do Marketplace. O padrão é preview; `--apply`
|
|
177
|
+
exige grafo completo e seguro, instala folhas primeiro e faz rollback, enquanto
|
|
178
|
+
`--apply-resolved` é a opção explícita para aplicar apenas a parte comprovada e
|
|
179
|
+
ainda retorna estado bloqueado para identidades não resolvidas.
|
|
180
|
+
|
|
181
|
+
Em 4 de agosto de 2026, a aceitação autenticada importou Kafka 2.12.0 (Content
|
|
182
|
+
ID 105878) e resolveu o grafo oficial em 10.24.0.73019 e 11.12.1. Os dois grafos
|
|
183
|
+
importaram DataWidgets 3.11.3 com Content ID 116540 e Version ID
|
|
184
|
+
`e7b6d703-8e47-42f4-bb92-934e3601e71b`. O Combo box autenticado final é o
|
|
185
|
+
componente oficial independente Widget/clientModule 219304, versão 2.9.0,
|
|
186
|
+
Version ID `dce845f4-d051-4161-847c-016c01703caa`. Sua instalação faz backup e
|
|
187
|
+
substitui o asset Combo 2.6.x anterior trazido pelo Atlas Core (Content ID
|
|
188
|
+
117187); o Atlas é o proprietário anterior do asset, não o componente Combo.
|
|
189
|
+
O grafo 11.12 também inclui Library Logging 1.13.0, Encryption 11.1.1, Mx Model
|
|
190
|
+
Reflection 9.1.0 e Mendix Feedback Module 5.0.0 (Content ID 205506). Como o
|
|
191
|
+
índice por nome da API não expõe `FeedbackModule`, o MXRB usa o ID oficial
|
|
192
|
+
somente como dica de descoberta e ainda exige que o MPK baixado prove o nome
|
|
193
|
+
interno.
|
|
194
|
+
|
|
195
|
+
As duas gerações agora passam no gate completo de aceitação do frontend com
|
|
196
|
+
zero achados no preflight da origem e da reconstrução, equivalência estrutural,
|
|
197
|
+
assets e proveniência do Marketplace exatos e zero erros no MxBuild. O
|
|
198
|
+
export/rebuild Ruby preserva o lock do Marketplace, MPKs em cache, originais,
|
|
199
|
+
assets declarados e seus checksums; assim, o projeto reconstruído mantém a proveniência dos pacotes,
|
|
200
|
+
e não apenas os bytes dos widgets. A trilha segura de migração e os oráculos
|
|
201
|
+
externos MxBuild/`mx check` estão concluídos na matriz suportada. Essas
|
|
202
|
+
ferramentas continuam sendo apenas validação externa, nunca dependências da
|
|
203
|
+
implementação MXRB.
|
|
204
|
+
|
|
205
|
+
`update` e `remove` oficiais são prévias seguras sem `--apply`. Antes de
|
|
206
|
+
alterar o projeto, o MXRB compara módulo e contagem de units do lock com o
|
|
207
|
+
pacote em cache, varre todas as units externas em busca de referências a IDs
|
|
208
|
+
que desapareceriam e recusa assets alterados ou ausentes. Um update precisa
|
|
209
|
+
preservar o ID do módulo e todo ID referenciado externamente. Ao aplicar, o MXRB
|
|
210
|
+
protege MPR, `mprcontents` v2, lock, caches, assets declarados e arquivo de
|
|
211
|
+
variáveis do Atlas; qualquer falha restaura toda essa fronteira. Assets
|
|
212
|
+
compartilhados não são removidos enquanto outro pacote no lock os declarar.
|
|
213
|
+
|
|
214
|
+
Há dois marketplaces distintos: `mxrb module search/add` instala módulos Ruby
|
|
215
|
+
reutilizáveis do ecossistema MXRB; `mxrb marketplace ...` instala pacotes
|
|
216
|
+
Mendix oficiais/comunitários.
|
|
217
|
+
|
|
218
|
+
## Auditoria de conectores de protocolo
|
|
219
|
+
|
|
220
|
+
`mxrb protocols` é uma auditoria somente leitura dos conectores de IoT,
|
|
221
|
+
industriais e de mensageria que um projeto importou do Marketplace. Ele nunca
|
|
222
|
+
executa um protocolo e nunca instala nada; apenas relata os metadados públicos
|
|
223
|
+
que o modelo expõe.
|
|
224
|
+
|
|
225
|
+
```sh
|
|
226
|
+
mxrb protocols App.mpr
|
|
227
|
+
mxrb protocols App.mpr --json
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Os conectores reconhecidos aparecem com nome do módulo, protocolo e id do
|
|
231
|
+
componente no Marketplace; os módulos de marketplace não reconhecidos são
|
|
232
|
+
listados à parte. O reconhecimento é por `AppStoreGuid` verificado, então um
|
|
233
|
+
módulo cujo GUID não foi confirmado em fixture real ou metadado oficial é
|
|
234
|
+
relatado como não reconhecido, nunca inferido.
|
|
235
|
+
|
|
236
|
+
Este registro de protocolos é um terceiro catálogo, distinto dos módulos Ruby
|
|
237
|
+
reutilizáveis de `mxrb module` e dos pacotes oficiais de `mxrb marketplace`.
|
|
238
|
+
|
|
239
|
+
Os ids públicos verificados atualmente cobrem MQTT, OPC-UA, Kafka, AMQP e
|
|
240
|
+
WebSocket. Consultas autenticadas à Content API e ao catálogo oficial ainda não
|
|
241
|
+
retornam componente Modbus; por isso ele continua sem cadastro até que um
|
|
242
|
+
componente oficial ou uma fixture MPR real comprove sua identidade. O id
|
|
243
|
+
público serve para planejamento; o reconhecimento dentro de um MPR ainda exige
|
|
244
|
+
`AppStoreGuid` verificado.
|
|
245
|
+
|
|
246
|
+
O builder Ruby pode declarar a intenção de instalação sem escrever módulo vazio
|
|
247
|
+
nem GUID inventado:
|
|
248
|
+
|
|
249
|
+
```ruby
|
|
250
|
+
builder.connector :kafka, version: "2.12.0"
|
|
251
|
+
planos = builder.connector_plans(adapter: Mxrb::Protocols.adapter(installer:, api:))
|
|
252
|
+
planos.each { puts _1.changes }
|
|
253
|
+
planos.each(&:apply!) # operação autenticada e explícita no Marketplace
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Sem o adapter, `connector_plans` é somente prévia. `build!` também falha fechado
|
|
257
|
+
enquanto houver declarações pendentes: o conteúdo real deve ser instalado no
|
|
258
|
+
MPR pelo adapter oficial. Entradas `Module` e `Service` podem ser resolvidas,
|
|
259
|
+
mas o MPK baixado ainda precisa passar independentemente pelas validações de
|
|
260
|
+
fronteira de pacote de módulo.
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Estrutura do projeto exportado
|
|
2
|
+
|
|
3
|
+
**Português** · [English](../en-US/project-structure.md) · [Deutsch](../de-DE/project-structure.md)
|
|
4
|
+
|
|
5
|
+
A árvore produzida por `mxrb export` separa políticas globais, comportamento
|
|
6
|
+
dos módulos, unidades nativas preservadas e assets:
|
|
7
|
+
|
|
8
|
+
```text
|
|
9
|
+
project.rb
|
|
10
|
+
.mxrb/{native_units.json,native_units.rb,assets.json}
|
|
11
|
+
app/{security,navigation,design_system}/
|
|
12
|
+
modules/NomeDoModulo/{domain,application,presentation,infrastructure,security}/
|
|
13
|
+
theme/
|
|
14
|
+
themesource/
|
|
15
|
+
resources/
|
|
16
|
+
widgets/
|
|
17
|
+
javasource/
|
|
18
|
+
javascriptsource/
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
`project.rb` orquestra o carregamento. Os módulos contêm o comportamento. O
|
|
22
|
+
manifesto nativo preserva estruturas ainda sem DSL concisa; o manifesto de
|
|
23
|
+
assets registra caminho relativo, tamanho e SHA-256 de cada arquivo.
|
|
24
|
+
|
|
25
|
+
Na reconstrução, caminhos absolutos, traversal com `..`, arquivos ausentes e
|
|
26
|
+
checksums divergentes falham de forma segura. Somente entradas declaradas no
|
|
27
|
+
manifesto são gravadas.
|
|
28
|
+
|
|
29
|
+
A estrutura suporta Ruby para um Mendix novo, Ruby sobre baseline exportado,
|
|
30
|
+
Mendix para Ruby editável e Mendix → Ruby → Mendix estruturalmente equivalente.
|
|
31
|
+
|
|
32
|
+
[Voltar ao índice](README.md)
|