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,211 @@
1
+ # OQL, SQL-Ansicht und lokale Datenbank
2
+
3
+ MXRB stellt OQL nur bereit, wenn das native Modell tatsächlich OQL enthält.
4
+ Erkannt werden OQL-Quellen von Datasets und Abfragen von View Entities. Eine
5
+ Anwendung ohne OQL liefert eine leere Sammlung und erhält keine künstlichen
6
+ Abfragedokumente.
7
+
8
+ ## Statische Inspektion
9
+
10
+ ```ruby
11
+ Mxrb.open("Shop.mpr") do |project|
12
+ next unless project.oql?
13
+
14
+ project.oql_queries.each do |query|
15
+ puts query.qualified_name
16
+ puts query.oql
17
+ puts query.parameters
18
+ end
19
+
20
+ project.oql_sql_views(dialect: :postgresql).each do |view|
21
+ puts view.sql if view.supported?
22
+ warn view.warnings.join("\n")
23
+ end
24
+ end
25
+ ```
26
+
27
+ Die CLI liefert dasselbe typisierte Ergebnis:
28
+
29
+ ```sh
30
+ bundle exec mxrb oql Shop.mpr
31
+ bundle exec mxrb oql Shop.mpr --dialect ansi
32
+ bundle exec mxrb oql Shop.mpr --dialect sql_server --json
33
+ ```
34
+
35
+ Die SQL-Ansicht ist strikt schreibgeschützt. Parameter wie `$Customer` werden
36
+ zu benannten Bind-Parametern wie `:Customer`; Werte werden nie interpoliert.
37
+ Zeichenketten und Kommentare bleiben undurchsichtig. Mehrere Anweisungen und
38
+ schreibende OQL-Operationen werden abgelehnt.
39
+
40
+ Das erzeugte SQL hat die Vertrauensstufe `logical`. PostgreSQL- und
41
+ SQL-Server-Ansichten verwenden die übliche Tabellenform `module$entity`, ANSI
42
+ behält `Module.Entity` bei. Physische Namen müssen immer mit der Datenbank des
43
+ exakten Mendix Runtime geprüft werden. Assoziationspfad-Joins gelten als nicht
44
+ unterstützt, solange Runtime-Speichermetadaten den korrekten Join nicht
45
+ beweisen können.
46
+
47
+ ## Dialektabhängige Analyse
48
+
49
+ `Oql::Analyzer` erkennt Kosten- und Portabilitätsmuster im Originaltext,
50
+ bewahrt das auslösende Fragment für Hervorhebungen und liefert konkrete
51
+ Alternativen für PostgreSQL, SQL Server und ANSI:
52
+
53
+ ```ruby
54
+ report = Mxrb::Oql::Analyzer.new(dialect: :postgresql)
55
+ .analyze_source("SELECT * FROM Sales.Order")
56
+ report.findings.each { puts "#{_1.rule}: #{_1.suggestions[:postgresql]}" }
57
+
58
+ reports = Mxrb.open("Shop.mpr") { _1.oql_analysis(dialect: :postgresql) }
59
+ ```
60
+
61
+ Regeln erfassen führende und beidseitige Wildcards, Präfixsuchen,
62
+ `LOWER`/`UPPER`/`CAST` in `WHERE`, kartesische Produkte und `SELECT *`.
63
+ Findings sind `hint`, `warning` oder `error`; `clean?` bedeutet keine Fehler.
64
+
65
+ Die CLI verarbeitet natives OQL sowie Ad-hoc-Quellen in OQL und SQL:
66
+
67
+ ```sh
68
+ bundle exec mxrb analyze Shop.mpr --dialect postgresql
69
+ bundle exec mxrb analyze --oql "SELECT * FROM Sales.Order"
70
+ bundle exec mxrb analyze --sql "SELECT * FROM sales$order" --json
71
+ ```
72
+
73
+ ## Reale Pläne und Datenbank-Performance
74
+
75
+ Eine statische Analyse kann nicht beweisen, welchen Pfad der Optimierer wählt.
76
+ Im materialisierten PostgreSQL-Workspace fragt MXRB deshalb auch den realen
77
+ Planner im JSON-Format ab und verknüpft Planrelationen mit `pg_indexes`:
78
+
79
+ ```sh
80
+ bundle exec mxrb db explain Shop.mpr \
81
+ "SELECT * FROM \"sales$order\" WHERE status = 'Open'"
82
+ bundle exec mxrb db explain Shop.mpr \
83
+ "SELECT * FROM \"sales$order\" WHERE status = 'Open'" --analyze --json
84
+ ```
85
+
86
+ Der Standardmodus verwendet `EXPLAIN` und führt die Abfrage nicht aus.
87
+ `--analyze` ist explizit, weil es `EXPLAIN ANALYZE` verwendet; die Abfrage läuft
88
+ mit der schreibgeschützten Rolle und liefert Zeiten und Buffer. Der Bericht
89
+ unterscheidet kleine, möglicherweise optimale sequenzielle Scans von großen
90
+ Scans. Außerdem meldet er viele verworfene Filterzeilen, abweichende
91
+ Kardinalitätsschätzungen, Nested Loops mit hohem Volumen und Sortierungen auf
92
+ Festplatte. Vorhandene Indizes dienen als Evidenz; MXRB erfindet ohne
93
+ Selektivitäts- und Workload-Daten keine `CREATE INDEX`-Anweisungen.
94
+
95
+ Auch der kumulative PostgreSQL-Workload kann untersucht werden:
96
+
97
+ ```sh
98
+ bundle exec mxrb db workload Shop.mpr --limit 50
99
+ bundle exec mxrb db workload Shop.mpr --limit 50 --json
100
+ ```
101
+
102
+ Der Workspace aktiviert `pg_stat_statements` und `track_io_timing`. Der Bericht
103
+ ordnet Query-Fingerprints nach kumulativem Aufwand und analysiert mittlere
104
+ Latenz, Cache-Hits, I/O, temporäre Blöcke und Zeilen pro Aufruf.
105
+ Tabellenstatistiken zeigen sequenziellen Scan-Druck; große nicht eindeutige
106
+ Indizes ohne beobachtete Scans werden ebenfalls gemeldet. Da diese Werte seit
107
+ dem Statistik-Reset kumulativ sind, wird eine Indexentfernung nie ohne Prüfung
108
+ des realen Zeitfensters und Workloads empfohlen.
109
+
110
+ Für ein SQL-Server-Deployment wird die Verbindung explizit mit `sqlcmd`
111
+ angegeben:
112
+
113
+ ```sh
114
+ export MXRB_SQLSERVER_PASSWORD='geheim'
115
+ bundle exec mxrb db explain Shop.mpr \
116
+ "SELECT * FROM dbo.[Order] WHERE Status = 'Open'" \
117
+ --engine sql_server --server db.example:1433 \
118
+ --database Shop --user mxrb_analyst --json
119
+ ```
120
+
121
+ Der geschätzte Modus nutzt `SHOWPLAN_XML`; `--analyze` verwendet `STATISTICS
122
+ XML` und führt nur ein `SELECT`/`WITH` aus. Der Parser erkennt große Table- und
123
+ Clustered-Scans, Nested Loops mit hohem Volumen, tempdb-Spills,
124
+ Kardinalitätsabweichungen und Missing-Index-Hinweise. Diese Hinweise bleiben
125
+ Optimierer-Hypothesen und werden nicht automatisch als DDL ausgeführt. Das
126
+ Passwort wird über `SQLCMDPASSWORD` und nie per argv übertragen. Der Engine-Typ
127
+ wird nicht aus der MPR abgeleitet, da er zur Deployment-Konfiguration gehört.
128
+
129
+ ## Materialisierte lokale PostgreSQL-Datenbank
130
+
131
+ Eine MPR enthält das Anwendungsmodell, nicht einen Snapshot der
132
+ Anwendungsdaten. Das Mendix Runtime verwaltet das Datenbankschema und
133
+ synchronisiert es aus dem Modell. MXRB kann das exakte portable Runtime bauen,
134
+ eine isolierte PostgreSQL-Datenbank starten, diese Synchronisierung ausführen
135
+ lassen und SQL-Zugriff bereitstellen:
136
+
137
+ ```sh
138
+ bundle exec mxrb db up Shop.mpr
139
+ bundle exec mxrb db status Shop.mpr
140
+ bundle exec mxrb db sql Shop.mpr \
141
+ 'SELECT * FROM "sales$order" LIMIT 20'
142
+ bundle exec mxrb db shell Shop.mpr
143
+ ```
144
+
145
+ Nach einer Änderung der MPR wird unter Beibehaltung der Daten neu gebaut und
146
+ synchronisiert:
147
+
148
+ ```sh
149
+ bundle exec mxrb db sync Shop.mpr
150
+ bundle exec mxrb db down Shop.mpr
151
+ ```
152
+
153
+ `db down` stoppt die Container, bewahrt aber das PostgreSQL-Volume. Ein
154
+ späteres `db up` verwendet Paket-Cache und Daten erneut. Der Standard-Port ist
155
+ `127.0.0.1:55432` und kann mit `--port` geändert werden.
156
+
157
+ Lokale Werkzeuge können denselben Workspace über JSON HTTP abfragen:
158
+
159
+ ```sh
160
+ bundle exec mxrb serve Shop.mpr --port 4567
161
+ curl -X POST http://127.0.0.1:4567/query \
162
+ -H 'Content-Type: application/json' \
163
+ -d '{"sql":"SELECT * FROM \"sales$order\" LIMIT 20"}'
164
+ ```
165
+
166
+ Der Body akzeptiert genau ein Feld `sql` oder `oql`. Ad-hoc-OQL durchläuft den
167
+ sicheren PostgreSQL-Übersetzer; parametrisierte Abfragen und alles außer einer
168
+ einzelnen `SELECT`-/`WITH`-Anweisung werden abgelehnt. Antworten enthalten
169
+ `rows`, `row_count`, `elapsed_ms`, Warnungen oder einen strukturierten Fehler.
170
+ Der Server bindet nur an Loopback, verwendet `mxrb_reader` und bereitet den
171
+ Workspace standardmäßig vor; `--no-up` verwendet einen bereits laufenden
172
+ Workspace.
173
+
174
+ Die dauerhafte Bereinigung ist absichtlich explizit:
175
+
176
+ ```sh
177
+ bundle exec mxrb db destroy Shop.mpr --yes
178
+ ```
179
+
180
+ Entfernt werden nur Ressourcen mit dem passenden MXRB-Eigentümer-Label.
181
+
182
+ ## Sicherheitsgrenze
183
+
184
+ - PostgreSQL wird ausschließlich an die Loopback-Schnittstelle gebunden.
185
+ - Jeder absolute MPR-Pfad erhält eigene Container, Netzwerk, Volume und
186
+ Zustandsdaten.
187
+ - Zufällige Zugangsdaten liegen außerhalb des Repositorys im
188
+ XDG-Zustandsverzeichnis und haben den Modus `0600`.
189
+ - `db sql`, `db shell` und `db url` verwenden `mxrb_reader`; Rolle und
190
+ Transaktionen sind standardmäßig schreibgeschützt.
191
+ - `mxrb_reader` erhält im isolierten Workspace `pg_read_all_stats`, damit
192
+ Runtime-Fingerprints korreliert werden können; dies erlaubt keine Datenänderung.
193
+ - `--write` wählt ausdrücklich die Eigentümerrolle des Runtime. Direkte
194
+ Schreibzugriffe können Mendix-Invarianten verletzen und sollten Ausnahmen
195
+ bleiben.
196
+ - Der PostgreSQL-Workspace zeigt nie auf eine bestehende entfernte Datenbank.
197
+ Die SQL-Server-Plananalyse ist eine separate, explizite Deployment-Verbindung;
198
+ dafür sollte ein Read-only-Login mit SHOWPLAN-Berechtigung verwendet werden.
199
+ Das Passwort bleibt in einer Umgebungsvariable und mutierende Schlüsselwörter,
200
+ auch in schreibenden CTEs, werden abgelehnt.
201
+
202
+ Das exakte Mendix-Toolchain und der Docker-Daemon müssen verfügbar sein. Für
203
+ SQL-Server-Pläne wird zusätzlich `sqlcmd` benötigt. Eine Schemasynchronisierung
204
+ kann bei Modelländerungen vorhandene Daten ändern oder
205
+ ablehnen. Wertvolle lokale Volumes sollten vor riskanten Migrationen gesichert
206
+ werden.
207
+
208
+ Siehe die offizielle Mendix-Dokumentation zu
209
+ [OQL](https://docs.mendix.com/refguide/oql/),
210
+ [Datenspeicherung](https://docs.mendix.com/refguide/data-storage/) und
211
+ [Runtime-Datenbankeinstellungen](https://docs.mendix.com/refguide/custom-settings/).
@@ -0,0 +1,36 @@
1
+ # Bewertung der Mendix-API-Integration
2
+
3
+ Datum: 1. August 2026. Quelle: offizieller [Mendix-API- und SDK-Index](https://docs.mendix.com/apidocs-mxsdk/).
4
+
5
+ ## Entscheidungsmatrix
6
+
7
+ | API oder SDK | Verwendung in MXRB | Entscheidung |
8
+ | --- | --- | --- |
9
+ | Projects API | zugängliche Apps und Projektmetadaten | als `team-server projects` integriert; standardmäßig lesend |
10
+ | App Repository API | Repository-Info, Branches und Commits | in Team-Server-Erkennung und Clone integriert |
11
+ | Marketplace Content API | Module/Widgets finden und laden | in Marketplace-Operationen integriert |
12
+ | Build API | natives Artefakt mit offiziellem Cloud-Build vergleichen | optionale Prüfung; nie Abhängigkeit des nativen Builds |
13
+ | Deploy API v4 | Apps/Umgebungen vor Release-Prüfung inventarisieren | lesender Adapter vorgeschlagen; Änderungen nur nach Bestätigung |
14
+ | Pipelines API | bestehende CI/CD-Pipeline starten und beobachten | Opt-in-Adapter mit Idempotenz und Statusabfrage vorgeschlagen |
15
+ | Backups API v2 | Snapshots vor Deployment auflisten/erstellen/laden | Sicherheitsadapter vorgeschlagen; Restore/Delete bleiben explizit |
16
+ | Runtime API 11 | eigenes Java kompilieren und Runtime-Verträge prüfen | Vertrag für Proxy-Erzeugung; Java-API, kein REST-Ersatz |
17
+ | Client- und Pluggable-Widget-APIs | Dojo-/React-/Data-Grid-Verträge | Referenz für Webartefakte, kein HTTP-Client |
18
+ | Catalog APIs | kontrollierte Datenquellen verwalten | zukünftiges Plugin; außerhalb von Build/Runtime |
19
+ | Model/Platform SDKs und Studio-Pro-Erweiterung | Apps remote modellieren oder Studio Pro erweitern | bewusst keine Pflicht; MXRB bleibt mit Ruby/SQLite/BSON eigenständig |
20
+
21
+ ## Integrationsregeln
22
+
23
+ - Remote-Aufrufe sind explizit; `generate`, `compile`, `validate` und `db up` kontaktieren nie die Mendix Cloud.
24
+ - PATs/API-Schlüssel stammen aus geschützter Datei oder Umgebung und werden nie in Berichte, Logs, Projekte oder Git geschrieben.
25
+ - Lesen ist Standard. Build, Deploy, Pipeline, Restore, Mitgliedschaft und Löschen benötigen eigene Befehle und Bestätigung.
26
+ - Die Build API gilt nur für Mendix-Cloud-Apps und verwendet Account-API-Keys; sie ersetzt den lokalen Compiler nicht.
27
+ - Versionierte Runtime-/Frontend-APIs dienen als Kompatibilitätsnachweis. MXRB verwendet exakte Schemas/Seeds und schlägt ohne passenden Vertrag oder Launcher geschlossen fehl.
28
+
29
+ ## Empfohlene Reihenfolge
30
+
31
+ 1. App-Repository-Branches/Commits in `team-server` auflisten.
32
+ 2. Lesendes Deploy-Inventar und optionales Build-Vergleichsgate.
33
+ 3. Pipeline-Status/Start mit Idempotenz und begrenztem Polling.
34
+ 4. Backup-Listen/Erstellen/Download vor Cloud-Änderungen.
35
+
36
+ Catalog und Studio-Pro-Erweiterungen bleiben getrennte Adapter, da sie das Risiko des nativen Kerns nicht senken.
@@ -0,0 +1,243 @@
1
+ # Betrieb, Lifecycle und Marketplace
2
+
3
+ ## Diagnose, Benchmark und Weiterentwicklung
4
+
5
+ ```sh
6
+ mxrb doctor .
7
+ mxrb benchmark App.mpr --iterations 5 --json
8
+ mxrb project inspect . --json
9
+ mxrb upgrade --mendix 11.12.1 --target .
10
+ mxrb upgrade --mendix 11.12.1 --target . --apply
11
+ mxrb migrate plan .
12
+ mxrb migrate check .
13
+ ```
14
+
15
+ `doctor` prüft Ruby-Projekt, Aggregatoren, MPR und lokale Toolchain.
16
+ `benchmark` misst Öffnen, semantische Indizierung und Validierung. Ein Upgrade
17
+ ist ohne `--apply` nur eine Vorschau. Migration erzeugt das Projekt temporär
18
+ und vergleicht es mit dem aktuellen MPR; `check` schlägt bei Modelldrift fehl.
19
+
20
+ ## Frontend-Migration und Abnahme
21
+
22
+ ```sh
23
+ mxrb frontend migrate App.mpr --json
24
+ mxrb frontend migrate App.mpr --apply --json
25
+ script/frontend_acceptance App.mpr -o frontend-round-trip.json
26
+ script/frontend_acceptance App.mpr --mxbuild /pfad/mxbuild -o frontend.json
27
+ script/frontend_acceptance App.mpr --mx /pfad/mx -o frontend-diagnostics.json
28
+ script/frontend_lifecycle_acceptance --version 11.12.1 --mx /pfad/mx \
29
+ --mxbuild /pfad/mxbuild --strict-warnings -o frontend-lifecycle.json
30
+ script/frontend_browser_acceptance --scenario examples/frontend-browser-scenario.json \
31
+ --url http://127.0.0.1:18080 --password-file /pfad/credentials.json \
32
+ --baseline examples/frontend-browser-baseline-11.12.1.json
33
+ script/frontend_browser_acceptance --scenario examples/page-chain-browser-scenario.json \
34
+ --url http://127.0.0.1:18080 --password-file /pfad/credentials.json
35
+ ```
36
+
37
+ `mxrb frontend migrate` ist standardmäßig eine unveränderliche, fail-closed
38
+ Vorschau. Für Mendix 10 und 11 plant der Befehl Aktualisierungen installierter
39
+ Pluggable-Widget-Schemata, alter Layout-Zeilen-Gewichte und Design Properties
40
+ aus dem Paket-XML. `--apply` schreibt nur einen sicheren Plan in einer einzigen
41
+ MPR-Transaktion. Unbekannte konfigurierte Properties, eine nicht unterstützte
42
+ Generation oder eine nach der Vorschau geänderte Unit blockieren den Schreibzugriff.
43
+ Weder Vorschau noch Anwendung rufen Mendix-Werkzeuge auf.
44
+
45
+ `script/frontend_acceptance` ist das reproduzierbare 10/11-Gate. Es validiert
46
+ Quell- und Rebuild-MPR, verlangt für beide einen kompatiblen nativen Preflight,
47
+ exportiert nach Ruby, baut neu auf, vergleicht die Modellstruktur und prüft
48
+ vollständige Asset-Inventare, Bytes, SHA-256-Prüfsummen und Marketplace-
49
+ Provenienz. Die Provenienzgrenze umfasst `.mxrb/marketplace.lock.json`, den
50
+ Paketcache und `.mxrb/marketplace-originals`; fehlende, geänderte oder
51
+ unerwartete Dateien lassen das Gate fehlschlagen. Die akzeptierte Renderer-
52
+ Matrix deckt jetzt Forms-Tabellen, `ListViewXPathSource`, Listen-Target-
53
+ Objekt-Properties, strukturierte Page-Variable-Mappings und Combo-box-
54
+ Enumerationen ab. Die Preflight-Basis sank unter 10.24 von 28 auf 0 und unter
55
+ 11.12 von 20 auf 0 Befunde.
56
+
57
+ Ohne `--mxbuild` lautet der Report-Scope `round_trip`, und `frontend_ready`
58
+ bleibt unbelegt. Mit `--mxbuild` dient MxBuild als schreibgeschütztes externes
59
+ Orakel und der Scope lautet `frontend`; es generiert, verändert oder repariert
60
+ das Projekt nie. Das Live-Orakel akzeptiert Erfolg nur, wenn MxBuild mit Status
61
+ null endet und ein nicht leeres MDA erzeugt; ein Toolchain-Fehler ohne gemeldete
62
+ Modellfehler schlägt geschlossen fehl. Am 4. August 2026 schloss die sichere
63
+ Migration die akzeptierte Matrix 10.24.0.73019 und 11.12.1 ab: Quelle und Rebuild lieferten null
64
+ MxBuild-Fehler, und beide Reports setzten `frontend_ready` auf `true`.
65
+
66
+ `script/frontend_lifecycle_acceptance` erstellt eine App ausschließlich über
67
+ die CLI, erzeugt das MPR, exportiert nach Ruby, ändert Home und Navigation,
68
+ fügt Entität, Formular, Microflow, Nanoflow und Asset hinzu, erzeugt erneut,
69
+ exportiert ein zweites Mal und verlangt einen strukturell identischen Rebuild.
70
+ In der offiziellen Matrix 10.24.0.73019 und 11.12.1 endeten Quelle und Rebuild
71
+ mit null Fehlern, Warnungen, Deprecations oder Empfehlungen in `mx check` sowie
72
+ null MxBuild-Fehlern.
73
+
74
+ `script/frontend_browser_acceptance` steuert Chromium über lokales CDP,
75
+ authentifiziert ohne Passwort in der Kommandozeile und vergleicht
76
+ deterministische Snapshots von Struktur, Geometrie, Styles und ARIA-Zustand.
77
+ Browser-Ausnahmen, defekte Widgets und der generische Runtime-Fehlerdialog
78
+ lassen das Gate fehlschlagen. Nur `--update-baseline` ersetzt die Baseline;
79
+ normale Läufe vergleichen schreibgeschützt. `mx.logout()` hält das Gate auch
80
+ unter einer Trial-Lizenz wiederholbar.
81
+
82
+ `page-chain-browser-scenario.json` verwendet eine `PageChainQa`-App mit
83
+ `DirectOrder`, `ClientOrder` und `HybridOrder`, erzeugt durch die drei Werte von
84
+ `page --chain`. Das Szenario klickt auf jeder Seite `Refresh` und verlangt auch
85
+ berechnetes CSS — Dokumentrand, Header-Gradient und Card-Hintergrund —, sodass
86
+ funktionales HTML ohne Theme das Gate nicht besteht.
87
+
88
+ `--mx` führt den offiziellen schreibgeschützten Checker mit Warnungen,
89
+ Deprecations und Best-Practice-Empfehlungen aus. Das Gate validiert die
90
+ Exit-Bitmaske und vergleicht normalisierte Signaturen von Quelle und Rebuild.
91
+ Die akzeptierte 10.24-Fixture hat 0 Fehler, 173 paketbezogene Warnungen,
92
+ 0 Deprecations und 2 Kafka-Empfehlungen; 11.12 hat 0 Fehler, 10 paketbezogene
93
+ Warnungen, 0 Deprecations und dieselben 2 Empfehlungen. Die JSON-Dateien von
94
+ Quelle und Rebuild sind in beiden Generationen bytegleich; diese beobachtbaren
95
+ Paketdiagnosen sind kein MXRB-Round-trip-Drift.
96
+
97
+ ## Offizieller und Community-Mendix-Marketplace
98
+
99
+ MXRB verwendet die dokumentierte Mendix Marketplace Content API. Das PAT
100
+ benötigt den Scope `mx:marketplace-content:read`:
101
+
102
+ ```sh
103
+ cp .env.example .env
104
+ # MXRB_MENDIX_PAT in .env setzen; die Datei nie committen.
105
+ mxrb marketplace login --pat-file .env
106
+ mxrb marketplace search "Community Commons"
107
+ mxrb marketplace show 170
108
+ mxrb marketplace versions 170 --mendix-version 11.12.1
109
+ mxrb marketplace pull 170 --mpr MeineApp.mpr
110
+ mxrb marketplace dependencies CommunityCommons --mpr MeineApp.mpr
111
+ mxrb marketplace dependencies CommunityCommons --mpr MeineApp.mpr --apply
112
+ mxrb marketplace dependencies CommunityCommons --mpr MeineApp.mpr --apply-resolved
113
+ mxrb marketplace update 170@3.5.0 --mpr MeineApp.mpr
114
+ mxrb marketplace update 170@3.5.0 --mpr MeineApp.mpr --apply
115
+ mxrb marketplace remove CommunityCommons --mpr MeineApp.mpr
116
+ mxrb marketplace remove CommunityCommons --mpr MeineApp.mpr --apply
117
+ mxrb marketplace pull github:mendix/CommunityCommons
118
+ mxrb marketplace import ./CommunityCommons.mpk --mpr MeineApp.mpr
119
+ mxrb marketplace audit --target . --mendix-version 11.12.1
120
+ mxrb marketplace list
121
+ mxrb marketplace verify
122
+ ```
123
+
124
+ Der empfohlene Login speichert ausschließlich den absoluten `.env`-Pfad in
125
+ `~/.config/mxrb/credentials` (oder `$XDG_CONFIG_HOME/mxrb/credentials`). MXRB
126
+ kopiert oder verändert die referenzierte Datei nicht und liest sie erst für
127
+ eine authentifizierte Marketplace-Operation. Neue Scaffolds ignorieren `.env`
128
+ und erzeugen eine geheimnisfreie `.env.example`.
129
+
130
+ `mxrb marketplace login --store-pat` aktiviert die verwaltete Speicherung
131
+ explizit; Ziel, JSON-Format und Modus `0600` werden vor der Eingabe angezeigt.
132
+ `MXRB_MENDIX_PAT_FILE=/pfad/.env` funktioniert ohne gespeicherte Referenz.
133
+ Details zeigt `mxrb marketplace login --help`.
134
+
135
+ Die offizielle Suche umfasst öffentliche und unternehmensprivate Inhalte.
136
+ `show` liefert Herausgeber, Typ, Support, Lizenz, Sichtbarkeit und Freigabe;
137
+ `versions` liefert Kompatibilität, Release Notes sowie Sicherheitsstatus und
138
+ CVE/CWE-Kennungen.
139
+
140
+ Mit `--mpr` liest MXRB `package.xml` und die eingebettete `project.mpr` und
141
+ importiert den vollständigen Modulbaum direkt über Ruby/SQLite/BSON. Dabei
142
+ werden weder `mx` noch `mxcli`, Studio Pro oder das Model SDK ausgeführt. IDs
143
+ bleiben erhalten, deklarierte Assets werden transaktional installiert und
144
+ Paketcache sowie Modulidentität im Lockfile gespeichert. Kompatible offizielle
145
+ Pakete dürfen in eine neuere Modellversion des Projekts importiert werden;
146
+ lokale und GitHub-Imports erfordern weiterhin eine identische Modellversion.
147
+ Bei Atlas Core werden außerdem die Legacy-Sass-Variablen verbunden, ohne
148
+ Projektanpassungen zu überschreiben.
149
+
150
+ Der offizielle `pull` ist Standard, wählt eine zum Ziel-MPR kompatible Version
151
+ und blockiert bekannte verwundbare Versionen ohne `--allow-vulnerable`.
152
+ `github:` bleibt als Fallback erhalten, `import` verarbeitet lokale MPKs.
153
+ Content ID, Version ID und Sicherheitsstatus werden gesperrt; `audit` prüft
154
+ Updates und Schwachstellen. `login` validiert und speichert das PAT außerhalb
155
+ des Projekts mit Modus `0600`. Das PAT wird nur an die exakten offiziellen
156
+ Hosts `marketplace-api.mendix.com` und `marketplace.mendix.com` gesendet.
157
+
158
+ `marketplace dependencies` entdeckt ungelöste qualifizierte Modulreferenzen im
159
+ eingebetteten Paket-MPR, löst sie rekursiv über die offizielle API, lädt jeden
160
+ Kandidaten und akzeptiert ihn nur, wenn das MPK selbst die angeforderte
161
+ Modulidentität bestätigt. Projekteigene Module erfüllen Referenzen, ohne als
162
+ Marketplace-Pakete ausgegeben zu werden. Standard ist eine Vorschau; `--apply`
163
+ verlangt einen vollständig sicheren Graphen und installiert Blätter zuerst mit
164
+ Rollback. `--apply-resolved` ist die explizite Freigabe für den verifizierten
165
+ Teilgraphen und meldet ungelöste Identitäten weiterhin als blockiert.
166
+
167
+ Am 4. August 2026 importierte die authentifizierte Abnahme Kafka 2.12.0
168
+ (Content ID 105878) und löste den offiziellen Graphen unter 10.24.0.73019 und
169
+ 11.12.1. Beide Graphen importierten DataWidgets 3.11.3 mit Content ID 116540
170
+ und Version ID `e7b6d703-8e47-42f4-bb92-934e3601e71b`. Die abschließend
171
+ authentifizierte Combo box ist die unabhängige offizielle Widget/clientModule-
172
+ Komponente 219304, Version 2.9.0, Version ID
173
+ `dce845f4-d051-4161-847c-016c01703caa`. Ihre Installation sichert und ersetzt
174
+ das ältere Combo-2.6.x-Asset aus Atlas Core (Content ID 117187); Atlas ist der
175
+ frühere Asset-Eigentümer, nicht die Combo-Komponente. Der 11.12-Graph enthält
176
+ außerdem Library Logging 1.13.0, Encryption 11.1.1, Mx Model Reflection 9.1.0
177
+ und Mendix Feedback Module 5.0.0 (Content ID 205506). Da der Namensindex
178
+ `FeedbackModule` nicht liefert, nutzt MXRB die offizielle Content ID nur als
179
+ Discovery-Hinweis und prüft weiterhin den internen MPK-Modulnamen.
180
+
181
+ Beide Generationen bestehen jetzt das vollständige Frontend-Abnahme-Gate mit
182
+ null Preflight-Befunden für Quelle und Rebuild, struktureller Gleichwertigkeit,
183
+ exakten Assets und Marketplace-Provenienz sowie null MxBuild-Fehlern. Ruby-
184
+ Export/Rebuild bewahrt den Marketplace-Lock, gecachte MPKs, Originale,
185
+ deklarierte Assets und ihre Prüfsummen; das neu aufgebaute Projekt behält damit
186
+ die Paketprovenienz und nicht nur die Widget-Bytes. MxBuild bleibt ausschließlich
187
+ externe Validierung und nie eine Implementierungsabhängigkeit von MXRB.
188
+
189
+ Offizielle Befehle `update` und `remove` sind ohne explizites `--apply` sichere
190
+ Vorschauen. Vor einer Änderung vergleicht MXRB Modul und Unit-Anzahl aus dem
191
+ Lock mit dem Cache-Paket, durchsucht alle externen Units nach Referenzen auf
192
+ wegfallende IDs und verweigert veränderte oder fehlende Paket-Assets. Ein
193
+ Update muss die Modul-ID und jede extern referenzierte Unit-ID erhalten. Beim
194
+ Anwenden sichert MXRB MPR, v2-`mprcontents`, Lock, Caches, deklarierte Assets und
195
+ die Atlas-Variablendatei; jeder Fehler stellt diese gesamte Grenze wieder her.
196
+ Gemeinsame Assets werden nicht entfernt, solange ein anderes gesperrtes Paket
197
+ sie beansprucht.
198
+
199
+ ## Protokoll-Connector-Audit
200
+
201
+ `mxrb protocols` ist ein schreibgeschütztes Audit der IoT-, Industrie- und
202
+ Messaging-Connectoren, die ein Projekt aus dem Marketplace importiert hat. Es
203
+ führt kein Protokoll aus und installiert nichts; es meldet nur die öffentlichen
204
+ Metadaten, die das Modell offenlegt.
205
+
206
+ ```sh
207
+ mxrb protocols App.mpr
208
+ mxrb protocols App.mpr --json
209
+ ```
210
+
211
+ Erkannte Connectoren werden mit Modulname, Protokoll und Marketplace-
212
+ Komponenten-id aufgeführt; nicht erkannte Marketplace-Module werden separat
213
+ gelistet. Die Erkennung erfolgt über eine verifizierte `AppStoreGuid`, sodass
214
+ ein Modul mit unbestätigter GUID als nicht erkannt gemeldet und nicht geraten
215
+ wird.
216
+
217
+ Diese Protokoll-Registry ist ein dritter Katalog, getrennt von den
218
+ wiederverwendbaren Ruby-Modulen aus `mxrb module` und den offiziellen Paketen
219
+ aus `mxrb marketplace`.
220
+
221
+ Verifizierte öffentliche Komponenten-IDs decken derzeit MQTT, OPC-UA, Kafka,
222
+ AMQP und WebSocket ab. Authentifizierte Abfragen der Content API und des
223
+ offiziellen Katalogs liefern weiterhin keine Modbus-Komponente; Modbus bleibt
224
+ daher unregistriert, bis eine offizielle Komponente oder ein echtes MPR-Fixture
225
+ die Identität belegt. Öffentliche IDs dienen der Planung; die Erkennung im MPR
226
+ erfordert weiterhin eine verifizierte `AppStoreGuid`.
227
+
228
+ Der Ruby-Builder kann eine Installation deklarieren, ohne ein leeres Modul oder
229
+ eine erfundene GUID zu schreiben:
230
+
231
+ ```ruby
232
+ builder.connector :kafka, version: "2.12.0"
233
+ plaene = builder.connector_plans(adapter: Mxrb::Protocols.adapter(installer:, api:))
234
+ plaene.each { puts _1.changes }
235
+ plaene.each(&:apply!) # explizite authentifizierte Marketplace-Operation
236
+ ```
237
+
238
+ Ohne Adapter bleibt `connector_plans` eine Vorschau. `build!` schlägt bei noch
239
+ offenen Connector-Deklarationen ebenfalls geschlossen fehl; der echte Inhalt
240
+ muss zuerst über den offiziellen Adapter in ein MPR installiert werden.
241
+ Marketplace-Einträge vom Typ `Module` und `Service` können aufgelöst werden,
242
+ während das heruntergeladene MPK zusätzlich die Modul-Paketprüfungen bestehen
243
+ muss.
@@ -0,0 +1,32 @@
1
+ # Struktur des exportierten Projekts
2
+
3
+ [Português](../pt-BR/project-structure.md) · [English](../en-US/project-structure.md) · **Deutsch**
4
+
5
+ Der von `mxrb export` erzeugte Baum trennt anwendungsweite Richtlinien,
6
+ Modulverhalten, erhaltene native Units und 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/Modulname/{domain,application,presentation,infrastructure,security}/
13
+ theme/
14
+ themesource/
15
+ resources/
16
+ widgets/
17
+ javasource/
18
+ javascriptsource/
19
+ ```
20
+
21
+ `project.rb` orchestriert das Laden. Module enthalten das Verhalten. Das
22
+ native Manifest erhält Strukturen ohne kompakte DSL; das Asset-Manifest
23
+ speichert relative Pfade, Größen und SHA-256-Prüfsummen.
24
+
25
+ Absolute Pfade, `..`-Traversal, fehlende Dateien und abweichende Prüfsummen
26
+ schlagen beim Wiederaufbau sicher fehl. Nur Manifest-Einträge werden geschrieben.
27
+
28
+ Die Struktur unterstützt Ruby zu einem neuen Mendix-Projekt, Ruby auf einem
29
+ exportierten Baseline, Mendix zu bearbeitbarem Ruby und den strukturell
30
+ gleichwertigen Mendix → Ruby → Mendix Round-trip.
31
+
32
+ [Zurück zum Index](README.md)
@@ -0,0 +1,116 @@
1
+ # MXRB: Ruby über alles
2
+
3
+ [Português](../pt-BR/ruby-first-roadmap.md) · [English](../en-US/ruby-first-roadmap.md) · **Deutsch**
4
+
5
+ ## Architekturprinzip
6
+
7
+ Ruby ist die einzige öffentliche Sprache von MXRB. CLI-Befehle sind dünne
8
+ Adapter. Es wird weder MDL noch eine konkurrierende DSL eingeführt. Studio Pro
9
+ und MxBuild sind externe Validatoren, keine Abhängigkeiten des Ruby-Kerns.
10
+
11
+ ## Verfügbar
12
+
13
+ - Tiefes Lesen und Schreiben von MPR v1/v2.
14
+ - Export in bearbeitbare Ruby-Projekte.
15
+ - Bearbeitbare `native_unit`-Hashes für jede native BSON-Struktur.
16
+ - Generierung, Integritätsprüfung, Vergleich und typisierter Diff.
17
+ - Semantischer Index, Referenzen, Caller/Callee und Impact.
18
+ - Sichere Umbenennung mit Vorschau.
19
+ - Sichere Entfernung eigenständiger Units mit Vorschau.
20
+ - Statische Analyse und ausführbare Modellbewertungen.
21
+ - Funktionale Microflow-Tests ohne JUnit.
22
+ - Lokale oder Docker-Ausführung von `mx check`, MxBuild und Runtime.
23
+ - Natives Coverage-Gate mit 100 % Zeilen und 100 % Branches im CI;
24
+ ohne explizite Grenzwerte bleibt der lokale Standard strenger bei 100/100.
25
+
26
+ ## Beispiel
27
+
28
+ ```ruby
29
+ Mxrb.open("app.mpr") do |project|
30
+ project.references_to("Sales.Order")
31
+ project.callers_of("Sales.Recalculate")
32
+ project.impact_of("Sales.Order")
33
+ project.plan_rename("Sales.Order", to: "Invoice")
34
+ plan = project.plan_remove("Sales.UnusedFlow")
35
+ plan.apply! if plan.safe?
36
+ project.analyze
37
+ end
38
+ ```
39
+
40
+ Bewertungsdateien sind gewöhnliches Ruby und werden mit
41
+ `mxrb evaluate app.mpr evaluation.rb` ausgeführt.
42
+
43
+ Schreibbare Projekte speichern einen fingerprint-basierten Cache des
44
+ semantischen Index im MPR. Schreibgeschützte Öffnungen dürfen ihn
45
+ wiederverwenden, verändern das Projekt jedoch nie.
46
+ `mxrb cache status`, `warm` und `clear` liefern Metriken und Wartung. Beim
47
+ Ersetzen wird zuerst per Upsert geschrieben und erst danach ein veralteter
48
+ Eintrag entfernt.
49
+
50
+ Die exakte native Mendix-5-Validierung bleibt von Windows/Studio Pro abhängig.
51
+ Sie ist als entfernte Legacy-Einschränkung dokumentiert und kein aktuelles
52
+ Auslieferungs-Gate.
53
+
54
+ Navigationsprofile lesen und schreiben jetzt native Mendix-Dokumente,
55
+ einschließlich rollenbasierter Startziele und rekursiver Menüs. Theme- und
56
+ Quell-Assets durchlaufen den Round-trip mit einem Prüfsummenmanifest;
57
+ Design-Tokens bieten Inventar, Lint, Kontrastmetriken und eine
58
+ Preview-basierte Migration literaler Werte.
59
+
60
+ Beim Entfernen blockieren eingehende Referenzen und Kind-Units den Plan.
61
+ Eingebettete Domain-Modellelemente benötigen ihre typisierte Mutation. Die CLI
62
+ zeigt mit `mxrb remove app.mpr Sales.UnusedFlow` nur die Vorschau; `--apply`
63
+ schreibt ausschließlich einen sicheren Plan.
64
+
65
+ Eigenständige Units können innerhalb desselben Moduls in ein Modul oder einen
66
+ Ordner verschoben werden:
67
+
68
+ ```ruby
69
+ plan = project.plan_move("Sales.Process", to: "Sales.Automation")
70
+ plan.apply!
71
+ ```
72
+
73
+ Der Plan bewahrt den nativen Containment-Typ und blockiert Domain-
74
+ Modellelemente, ungültige Container, Ordnerzyklen und modulübergreifende
75
+ Verschiebungen. `mxrb move` zeigt eine Vorschau; erst `--apply` schreibt.
76
+
77
+ ## Offizieller Mendix Marketplace
78
+
79
+ Diese Befehlsfamilie bleibt von `mxrb module` getrennt. Die dokumentierte
80
+ Marketplace Content API unterstützt authentifizierte Suche, Details,
81
+ kompatible Versionen, direkten Download, private Unternehmensinhalte und
82
+ Sicherheitsaudits. GitHub und lokale MPKs bleiben Fallbacks.
83
+
84
+ Lokale MPKs werden vollständig und ohne Mendix-Werkzeuge direkt über
85
+ Ruby/SQLite/BSON in das Ziel-MPR importiert. Das PAT benötigt
86
+ `mx:marketplace-content:read`. Verwundbare Releases werden standardmäßig
87
+ abgelehnt; Content-/Version-IDs und Sicherheitsdaten stehen im Lockfile.
88
+ Die authentifizierte Kafka-Abnahme und der transaktionale Lifecycle sind jetzt
89
+ umgesetzt. `marketplace update` und `marketplace remove` zeigen standardmäßig
90
+ nur eine Vorschau, erhalten extern referenzierte IDs, verweigern veränderte
91
+ Assets und sichern MPR, `mprcontents`, Cache, Lock und Assets vor explizitem
92
+ `--apply`. Auch die authentifizierten Folgeschritte sind umgesetzt:
93
+ `marketplace dependencies` löst offizielle Pakete rekursiv aus Referenzen im
94
+ eingebetteten MPR, prüft die tatsächliche Modulidentität jedes MPKs, erkennt
95
+ projekteigene Module, installiert Blätter zuerst und führt atomaren Rollback
96
+ aus. Kafka-Graphen bestanden die Abnahme unter 10.24 und 11.12; Ruby-
97
+ Export/Rebuild bewahrt Assets, Prüfsummen und Quell-/Rebuild-Diagnosen.
98
+
99
+ Die authentifizierte Matrix enthält jetzt DataWidgets 3.11.3 (Content ID
100
+ 116540, Version ID `e7b6d703-8e47-42f4-bb92-934e3601e71b`) und die unabhängige
101
+ offizielle Combo-box-Widget/clientModule-Komponente 219304, Version 2.9.0,
102
+ Version ID `dce845f4-d051-4161-847c-016c01703caa`. Die Installation sichert und
103
+ ersetzt das zuvor Atlas Core (Content ID 117187) gehörende 2.6.x-Asset. Ruby-
104
+ Roundtrips bewahren die Provenienz von Marketplace-Lock, Cache und Originalen;
105
+ `script/frontend_acceptance` blockiert Modell-, Asset-, Prüfsummen- oder
106
+ Provenienzdrift. Der native Renderer hat für die akzeptierten 10.24- und
107
+ 11.12-Fixtures null Preflight-Befunde in Quelle und Rebuild.
108
+
109
+ Die Migrationsschnittstelle ist als `mxrb frontend migrate DATEI.mpr`
110
+ umgesetzt: Standard ist die Vorschau, erst `--apply` schreibt einen sicheren
111
+ transaktionalen Plan. Diese Migration ist auf der gesamten unterstützten
112
+ Frontend-Matrix abgeschlossen. Das optionale externe MxBuild-Orakel liefert
113
+ für Quelle und Rebuild unter 10.24 und 11.12 null Fehler; `mx check` bewahrt
114
+ außerdem bytegleiche beobachtbare Paketdiagnosen in jedem Round-trip. MXRB
115
+ bleibt unabhängig: `mx` und MxBuild sind nur Validierungsorakel, niemals
116
+ Generatoren, Mutatoren oder Runtime-Abhängigkeiten.