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.
Files changed (237) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.de-DE.md +108 -0
  4. data/README.md +172 -0
  5. data/README.pt-BR.md +109 -0
  6. data/bin/mxrb +1613 -0
  7. data/docs/README.md +10 -0
  8. data/docs/de-DE/README.md +24 -0
  9. data/docs/de-DE/architectural-patterns.md +26 -0
  10. data/docs/de-DE/architectural-standard.md +48 -0
  11. data/docs/de-DE/architecture.md +76 -0
  12. data/docs/de-DE/compiler.md +162 -0
  13. data/docs/de-DE/conventions.md +19 -0
  14. data/docs/de-DE/design-system.md +52 -0
  15. data/docs/de-DE/entity-dsl.md +53 -0
  16. data/docs/de-DE/native-runtime-quality-report.md +74 -0
  17. data/docs/de-DE/oql-sql.md +211 -0
  18. data/docs/de-DE/platform-api-integration.md +36 -0
  19. data/docs/de-DE/platform-operations.md +243 -0
  20. data/docs/de-DE/project-structure.md +32 -0
  21. data/docs/de-DE/ruby-first-roadmap.md +116 -0
  22. data/docs/de-DE/scaffolds.md +59 -0
  23. data/docs/de-DE/semantic-refactoring.md +56 -0
  24. data/docs/de-DE/team-server.md +33 -0
  25. data/docs/de-DE/validation-matrix.md +64 -0
  26. data/docs/de-DE/vetclinic-acceptance.md +24 -0
  27. data/docs/de-DE/writing.md +138 -0
  28. data/docs/en-US/README.md +24 -0
  29. data/docs/en-US/architectural-patterns.md +151 -0
  30. data/docs/en-US/architectural-standard.md +89 -0
  31. data/docs/en-US/architecture.md +170 -0
  32. data/docs/en-US/compiler.md +157 -0
  33. data/docs/en-US/conventions.md +82 -0
  34. data/docs/en-US/design-system.md +163 -0
  35. data/docs/en-US/entity-dsl.md +53 -0
  36. data/docs/en-US/native-runtime-quality-report.md +73 -0
  37. data/docs/en-US/oql-sql.md +201 -0
  38. data/docs/en-US/platform-api-integration.md +36 -0
  39. data/docs/en-US/platform-operations.md +244 -0
  40. data/docs/en-US/project-structure.md +49 -0
  41. data/docs/en-US/ruby-first-roadmap.md +186 -0
  42. data/docs/en-US/scaffolds.md +57 -0
  43. data/docs/en-US/semantic-refactoring.md +198 -0
  44. data/docs/en-US/team-server.md +32 -0
  45. data/docs/en-US/validation-matrix.md +257 -0
  46. data/docs/en-US/vetclinic-acceptance.md +23 -0
  47. data/docs/en-US/writing.md +655 -0
  48. data/docs/pt-BR/README.md +24 -0
  49. data/docs/pt-BR/architectural-patterns.md +25 -0
  50. data/docs/pt-BR/architectural-standard.md +533 -0
  51. data/docs/pt-BR/architecture.md +300 -0
  52. data/docs/pt-BR/compiler.md +162 -0
  53. data/docs/pt-BR/conventions.md +19 -0
  54. data/docs/pt-BR/design-system.md +65 -0
  55. data/docs/pt-BR/entity-dsl.md +116 -0
  56. data/docs/pt-BR/native-runtime-quality-report.md +73 -0
  57. data/docs/pt-BR/oql-sql.md +208 -0
  58. data/docs/pt-BR/platform-api-integration.md +36 -0
  59. data/docs/pt-BR/platform-operations.md +260 -0
  60. data/docs/pt-BR/project-structure.md +32 -0
  61. data/docs/pt-BR/ruby-first-roadmap.md +239 -0
  62. data/docs/pt-BR/scaffolds.md +104 -0
  63. data/docs/pt-BR/semantic-refactoring.md +55 -0
  64. data/docs/pt-BR/team-server.md +59 -0
  65. data/docs/pt-BR/validation-matrix.md +86 -0
  66. data/docs/pt-BR/vetclinic-acceptance.md +50 -0
  67. data/docs/pt-BR/writing.md +177 -0
  68. data/examples/sudoku_evaluation.rb +14 -0
  69. data/examples/sudoku_functional_test.rb +28 -0
  70. data/lib/mxrb/architecture/graph.rb +124 -0
  71. data/lib/mxrb/architecture/validator.rb +98 -0
  72. data/lib/mxrb/benchmark.rb +33 -0
  73. data/lib/mxrb/compare.rb +390 -0
  74. data/lib/mxrb/compiler/adapter.rb +96 -0
  75. data/lib/mxrb/compiler/artifact_document_compiler.rb +102 -0
  76. data/lib/mxrb/compiler/artifact_materializer.rb +53 -0
  77. data/lib/mxrb/compiler/client_model_materializer.rb +42 -0
  78. data/lib/mxrb/compiler/code_action_document_compiler.rb +64 -0
  79. data/lib/mxrb/compiler/code_action_materializer.rb +35 -0
  80. data/lib/mxrb/compiler/code_action_type_compiler.rb +32 -0
  81. data/lib/mxrb/compiler/combo_box_bundle_compiler.rb +314 -0
  82. data/lib/mxrb/compiler/compatibility_analyzer.rb +169 -0
  83. data/lib/mxrb/compiler/constants_materializer.rb +111 -0
  84. data/lib/mxrb/compiler/data_grid_bundle_compiler.rb +290 -0
  85. data/lib/mxrb/compiler/database_connector_action_compiler.rb +280 -0
  86. data/lib/mxrb/compiler/deployment_asset_copier.rb +60 -0
  87. data/lib/mxrb/compiler/deployment_bootstrapper.rb +208 -0
  88. data/lib/mxrb/compiler/deployment_materializer.rb +43 -0
  89. data/lib/mxrb/compiler/deployment_metadata.rb +64 -0
  90. data/lib/mxrb/compiler/domain_document_compiler.rb +153 -0
  91. data/lib/mxrb/compiler/domain_model_materializer.rb +35 -0
  92. data/lib/mxrb/compiler/domain_security_compiler.rb +82 -0
  93. data/lib/mxrb/compiler/gallery_bundle_compiler.rb +190 -0
  94. data/lib/mxrb/compiler/generic_widget_bundle_compiler.rb +281 -0
  95. data/lib/mxrb/compiler/image_bundle_compiler.rb +216 -0
  96. data/lib/mxrb/compiler/java_proxy_generator.rb +509 -0
  97. data/lib/mxrb/compiler/legacy_data_grid_compiler.rb +267 -0
  98. data/lib/mxrb/compiler/legacy_page_builder.rb +287 -0
  99. data/lib/mxrb/compiler/mda.rb +99 -0
  100. data/lib/mxrb/compiler/microflow_document_compiler.rb +85 -0
  101. data/lib/mxrb/compiler/microflow_materializer.rb +48 -0
  102. data/lib/mxrb/compiler/microflow_node_compiler.rb +250 -0
  103. data/lib/mxrb/compiler/model_package.rb +116 -0
  104. data/lib/mxrb/compiler/model_values.rb +67 -0
  105. data/lib/mxrb/compiler/nanoflow_program_compiler.rb +483 -0
  106. data/lib/mxrb/compiler/navigation_document_compiler.rb +93 -0
  107. data/lib/mxrb/compiler/packager.rb +100 -0
  108. data/lib/mxrb/compiler/page_bundle_builder.rb +56 -0
  109. data/lib/mxrb/compiler/page_bundle_compiler.rb +2004 -0
  110. data/lib/mxrb/compiler/page_document_compiler.rb +77 -0
  111. data/lib/mxrb/compiler/portable_packager.rb +356 -0
  112. data/lib/mxrb/compiler/project_jar_archive.rb +84 -0
  113. data/lib/mxrb/compiler/project_jar_builder.rb +121 -0
  114. data/lib/mxrb/compiler/project_materializer.rb +139 -0
  115. data/lib/mxrb/compiler/project_model_orderer.rb +52 -0
  116. data/lib/mxrb/compiler/runtime_data_types.rb +31 -0
  117. data/lib/mxrb/compiler/runtime_model_schema.rb +90 -0
  118. data/lib/mxrb/compiler/schemas/runtime-10.24.0.73019.json +1052 -0
  119. data/lib/mxrb/compiler/schemas/runtime-11.json +1215 -0
  120. data/lib/mxrb/compiler/schemas/runtime-6.10.8.json +1148 -0
  121. data/lib/mxrb/compiler/schemas/runtime-7.17.0.json +1144 -0
  122. data/lib/mxrb/compiler/schemas/runtime-7.5.0.json +1215 -0
  123. data/lib/mxrb/compiler/schemas/runtime-9.6.1.29396.json +868 -0
  124. data/lib/mxrb/compiler/schemas/system-model-10.24.0.73019.b64 +1135 -0
  125. data/lib/mxrb/compiler/schemas/system-model-11.12.1.b64 +815 -0
  126. data/lib/mxrb/compiler/schemas/system-model-6.10.8.b64 +497 -0
  127. data/lib/mxrb/compiler/schemas/system-model-7.17.0.b64 +519 -0
  128. data/lib/mxrb/compiler/schemas/system-model-7.5.0.b64 +504 -0
  129. data/lib/mxrb/compiler/schemas/system-model-9.6.1.29396.b64 +816 -0
  130. data/lib/mxrb/compiler/security_materializer.rb +104 -0
  131. data/lib/mxrb/compiler/settings_document_compiler.rb +45 -0
  132. data/lib/mxrb/compiler/settings_materializer.rb +25 -0
  133. data/lib/mxrb/compiler/source_model.rb +128 -0
  134. data/lib/mxrb/compiler/system_model_seed.rb +88 -0
  135. data/lib/mxrb/compiler/system_queue_materializer.rb +54 -0
  136. data/lib/mxrb/compiler/system_text_materializer.rb +49 -0
  137. data/lib/mxrb/compiler/translation_materializer.rb +95 -0
  138. data/lib/mxrb/compiler/web_bundle_builder.rb +155 -0
  139. data/lib/mxrb/compiler/web_list_data_source.rb +139 -0
  140. data/lib/mxrb/compiler/web_operation_compiler.rb +614 -0
  141. data/lib/mxrb/compiler/web_shell_materializer.rb +194 -0
  142. data/lib/mxrb/compiler/widget_package_extractor.rb +63 -0
  143. data/lib/mxrb/doctor.rb +116 -0
  144. data/lib/mxrb/dsl/builder.rb +1636 -0
  145. data/lib/mxrb/errors.rb +18 -0
  146. data/lib/mxrb/evaluation.rb +131 -0
  147. data/lib/mxrb/exporter.rb +1716 -0
  148. data/lib/mxrb/frontend/migrator.rb +775 -0
  149. data/lib/mxrb/functional.rb +307 -0
  150. data/lib/mxrb/github/annotator.rb +161 -0
  151. data/lib/mxrb/initializer.rb +257 -0
  152. data/lib/mxrb/integrity/validator.rb +136 -0
  153. data/lib/mxrb/io/bson_codec.rb +145 -0
  154. data/lib/mxrb/io/mpr_file.rb +558 -0
  155. data/lib/mxrb/io/mxunit_codec.rb +42 -0
  156. data/lib/mxrb/marketplace.rb +380 -0
  157. data/lib/mxrb/model/association.rb +98 -0
  158. data/lib/mxrb/model/attribute.rb +100 -0
  159. data/lib/mxrb/model/connector.rb +17 -0
  160. data/lib/mxrb/model/design_materializer.rb +133 -0
  161. data/lib/mxrb/model/design_migration.rb +126 -0
  162. data/lib/mxrb/model/design_system.rb +111 -0
  163. data/lib/mxrb/model/domain_model.rb +51 -0
  164. data/lib/mxrb/model/entity.rb +180 -0
  165. data/lib/mxrb/model/menu.rb +38 -0
  166. data/lib/mxrb/model/microflow.rb +100 -0
  167. data/lib/mxrb/model/module.rb +142 -0
  168. data/lib/mxrb/model/navigation.rb +127 -0
  169. data/lib/mxrb/model/page.rb +410 -0
  170. data/lib/mxrb/model/project.rb +187 -0
  171. data/lib/mxrb/model/unit.rb +48 -0
  172. data/lib/mxrb/module_initializer.rb +75 -0
  173. data/lib/mxrb/official_marketplace/content_api.rb +292 -0
  174. data/lib/mxrb/official_marketplace/dependency_resolver.rb +329 -0
  175. data/lib/mxrb/official_marketplace/lifecycle.rb +367 -0
  176. data/lib/mxrb/official_marketplace/module_package_importer.rb +318 -0
  177. data/lib/mxrb/official_marketplace/widget_package_installer.rb +414 -0
  178. data/lib/mxrb/official_marketplace.rb +720 -0
  179. data/lib/mxrb/oql/analyzer.rb +155 -0
  180. data/lib/mxrb/oql/index_advisor.rb +85 -0
  181. data/lib/mxrb/oql/plan_analyzer.rb +185 -0
  182. data/lib/mxrb/oql/server.rb +132 -0
  183. data/lib/mxrb/oql/sql_server_plan_analyzer.rb +190 -0
  184. data/lib/mxrb/oql/sql_server_workload_analyzer.rb +80 -0
  185. data/lib/mxrb/oql/workload_analyzer.rb +175 -0
  186. data/lib/mxrb/oql/workload_baseline.rb +60 -0
  187. data/lib/mxrb/oql.rb +424 -0
  188. data/lib/mxrb/project_lifecycle.rb +76 -0
  189. data/lib/mxrb/protocols/plan.rb +86 -0
  190. data/lib/mxrb/protocols.rb +123 -0
  191. data/lib/mxrb/runtime/database_workspace.rb +677 -0
  192. data/lib/mxrb/runtime/docker_executor.rb +41 -0
  193. data/lib/mxrb/runtime/docker_workspace.rb +29 -0
  194. data/lib/mxrb/runtime/executor.rb +169 -0
  195. data/lib/mxrb/runtime/java_locator.rb +26 -0
  196. data/lib/mxrb/runtime/native.rb +474 -0
  197. data/lib/mxrb/runtime/sql_server_database.rb +146 -0
  198. data/lib/mxrb/runtime/toolchain.rb +82 -0
  199. data/lib/mxrb/scaffold/cli.rb +113 -0
  200. data/lib/mxrb/scaffold/generator.rb +246 -0
  201. data/lib/mxrb/scaffold/help.rb +80 -0
  202. data/lib/mxrb/scaffold/page_templates.rb +54 -0
  203. data/lib/mxrb/scaffold/recipes.rb +198 -0
  204. data/lib/mxrb/scaffold/registry.rb +82 -0
  205. data/lib/mxrb/scaffold/templates.rb +723 -0
  206. data/lib/mxrb/scaffold/transaction.rb +84 -0
  207. data/lib/mxrb/schema/tables.rb +55 -0
  208. data/lib/mxrb/semantic/analyzer.rb +473 -0
  209. data/lib/mxrb/semantic/batch_plan.rb +68 -0
  210. data/lib/mxrb/semantic/domain_mutator.rb +419 -0
  211. data/lib/mxrb/semantic/embedder.rb +51 -0
  212. data/lib/mxrb/semantic/extractor.rb +290 -0
  213. data/lib/mxrb/semantic/index.rb +623 -0
  214. data/lib/mxrb/semantic/inliner.rb +216 -0
  215. data/lib/mxrb/semantic/mover.rb +153 -0
  216. data/lib/mxrb/semantic/onnx_embedder.rb +34 -0
  217. data/lib/mxrb/semantic/remover.rb +70 -0
  218. data/lib/mxrb/semantic/renamer.rb +211 -0
  219. data/lib/mxrb/semantic/tfidf_embedder.rb +46 -0
  220. data/lib/mxrb/semantic/vec_store.rb +75 -0
  221. data/lib/mxrb/team_server.rb +390 -0
  222. data/lib/mxrb/templates/project/10.24.0.73019.json +32 -0
  223. data/lib/mxrb/templates/project/11.12.1.json +32 -0
  224. data/lib/mxrb/templates/project/6.10.8.json +50 -0
  225. data/lib/mxrb/templates/project/7.17.0.json +50 -0
  226. data/lib/mxrb/templates/project/7.5.0.json +50 -0
  227. data/lib/mxrb/templates/project/9.6.1.29396.json +50 -0
  228. data/lib/mxrb/version.rb +5 -0
  229. data/lib/mxrb/widget_package.rb +338 -0
  230. data/lib/mxrb/widget_synchronizer.rb +31 -0
  231. data/lib/mxrb/writer.rb +3775 -0
  232. data/lib/mxrb.rb +188 -0
  233. data/marketplace/catalog.json +10 -0
  234. data/marketplace/modules/shared-kernel/domain/README.md +4 -0
  235. data/marketplace/modules/shared-kernel/module.rb +5 -0
  236. data/marketplace/modules/shared-kernel/mxrb-module.json +9 -0
  237. 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)