@memoarchitect/ontology 0.13.2 → 0.15.1

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 (315) hide show
  1. package/README.md +5 -3
  2. package/examples/connected-patient-monitor/memo.identity.yaml +34 -0
  3. package/examples/connected-patient-monitor/memo.package.yaml +3 -1
  4. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +17 -12
  5. package/examples/connected-patient-monitor/model/{catalog → methodology}/project.sysml +4 -5
  6. package/examples/embedded-infusion-pump/memo.package.yaml +3 -1
  7. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +6 -6
  8. package/examples/embedded-infusion-pump/model/{catalog → methodology}/project.sysml +4 -5
  9. package/examples/functional-logical-physical/memo.identity.yaml +28 -0
  10. package/examples/functional-logical-physical/memo.package.yaml +3 -1
  11. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +5 -5
  12. package/examples/functional-logical-physical/model/{catalog → methodology}/project.sysml +4 -5
  13. package/examples/gpca-pump/analysis/Samples/01-model-overview.ipynb +40 -139
  14. package/examples/gpca-pump/analysis/Samples/02-architecture-hotspots.ipynb +38 -290
  15. package/examples/gpca-pump/analysis/Samples/03-model-quality.ipynb +47 -217
  16. package/examples/gpca-pump/analysis/Samples/04-change-impact-explorer.ipynb +50 -191
  17. package/examples/gpca-pump/analysis/Samples/05-model-charts.ipynb +42 -181
  18. package/examples/gpca-pump/analysis/Samples/06-ownership-graph.ipynb +40 -164
  19. package/examples/gpca-pump/analysis/Samples/07-model-inventory-table.ipynb +51 -172
  20. package/examples/gpca-pump/analysis/Samples/README.md +15 -9
  21. package/examples/gpca-pump/analysis/memo_model.py +243 -0
  22. package/examples/gpca-pump/memo.identity.yaml +521 -26
  23. package/examples/gpca-pump/memo.package.yaml +3 -1
  24. package/examples/gpca-pump/methodology/gpca_profiles.sysml +56 -47
  25. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +51 -78
  26. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +359 -357
  27. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +9 -9
  28. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +56 -69
  29. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +44 -59
  30. package/examples/gpca-pump/model/catalog/gpca_context.sysml +23 -35
  31. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +33 -40
  32. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +62 -63
  33. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +362 -483
  34. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +45 -70
  35. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +6 -12
  36. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +173 -169
  37. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +139 -225
  38. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +43 -47
  39. package/examples/gpca-pump/model/catalog/gpca_system.sysml +68 -65
  40. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +147 -116
  41. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +65 -90
  42. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +4 -6
  43. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +4 -6
  44. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +4 -6
  45. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +4 -6
  46. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +2 -4
  47. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +7 -6
  48. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +4 -6
  49. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +4 -6
  50. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +3 -5
  51. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +4 -6
  52. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +4 -6
  53. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +3 -5
  54. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +3 -5
  55. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +4 -6
  56. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +2 -4
  57. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +3 -5
  58. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +2 -4
  59. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +4 -6
  60. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +4 -6
  61. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +2 -4
  62. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +4 -6
  63. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +4 -6
  64. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +3 -5
  65. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +4 -6
  66. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +3 -5
  67. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +2 -4
  68. package/examples/gpca-pump/model/{catalog → methodology}/project.sysml +8 -6
  69. package/examples/ivd-laboratory-system/memo.package.yaml +3 -1
  70. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +12 -9
  71. package/examples/ivd-laboratory-system/model/{catalog → methodology}/project.sysml +4 -5
  72. package/examples/manual-surgical-instrument/memo.package.yaml +3 -1
  73. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +2 -6
  74. package/examples/manual-surgical-instrument/model/{catalog → methodology}/project.sysml +4 -5
  75. package/examples/multidimensional-layers/memo.package.yaml +3 -1
  76. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +2 -4
  77. package/examples/multidimensional-layers/model/{catalog → methodology}/project.sysml +4 -5
  78. package/examples/nested-architecture-dsm/memo.identity.yaml +93 -0
  79. package/examples/nested-architecture-dsm/memo.package.yaml +3 -1
  80. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +30 -30
  81. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +28 -28
  82. package/examples/nested-architecture-dsm/model/catalog/architecture/operational/context.sysml +2 -4
  83. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +4 -4
  84. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +7 -7
  85. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +8 -8
  86. package/examples/nested-architecture-dsm/model/{catalog → methodology}/project.sysml +4 -5
  87. package/examples/reusable-instrument/memo.package.yaml +3 -1
  88. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -7
  89. package/examples/reusable-instrument/model/{catalog → methodology}/project.sysml +4 -5
  90. package/examples/robot-cell-family/README.md +34 -0
  91. package/examples/robot-cell-family/memo.identity.yaml +142 -0
  92. package/examples/robot-cell-family/memo.package.yaml +7 -0
  93. package/examples/robot-cell-family/model/methodology/project.sysml +30 -0
  94. package/examples/robot-cell-family/model/shared/shared.sysml +53 -0
  95. package/examples/robot-cell-family/model/sos/chains.sysml +36 -0
  96. package/examples/robot-cell-family/model/sos/icds.sysml +29 -0
  97. package/examples/robot-cell-family/model/sos/sos.sysml +31 -0
  98. package/examples/robot-cell-family/model/sos/use_cases.sysml +25 -0
  99. package/examples/robot-cell-family/model/systems/manipulation/manipulation_system.sysml +35 -0
  100. package/examples/robot-cell-family/model/systems/navigation/navigation_system.sysml +46 -0
  101. package/examples/robot-cell-family/model/systems/perception/perception_system.sysml +37 -0
  102. package/examples/robot-platform/memo.package.yaml +3 -0
  103. package/examples/robot-platform/model/platform.sysml +15 -0
  104. package/examples/ros-mobile-robot/README.md +5 -4
  105. package/examples/ros-mobile-robot/memo.identity.yaml +94 -0
  106. package/examples/ros-mobile-robot/memo.package.yaml +3 -1
  107. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +26 -29
  108. package/examples/ros-mobile-robot/model/{catalog → methodology}/project.sysml +8 -14
  109. package/examples/software-only-medical-device/memo.package.yaml +3 -1
  110. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +9 -10
  111. package/examples/software-only-medical-device/model/{catalog → methodology}/project.sysml +8 -9
  112. package/examples/surgical-closure-workflow/memo.package.yaml +3 -1
  113. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +23 -26
  114. package/examples/surgical-closure-workflow/model/{catalog → methodology}/project.sysml +7 -5
  115. package/examples/surgical-robot/memo.package.yaml +3 -1
  116. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +14 -12
  117. package/examples/surgical-robot/model/{catalog → methodology}/project.sysml +4 -5
  118. package/examples/sysml-diagram-samples/README.md +1 -0
  119. package/examples/sysml-diagram-samples/memo.identity.yaml +459 -0
  120. package/examples/sysml-diagram-samples/memo.package.yaml +3 -1
  121. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +10 -20
  122. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +5 -5
  123. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml +10 -13
  124. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +11 -7
  125. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/diagram_samples.sysml +63 -8
  126. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/drill_down_view.sysml +88 -0
  127. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +25 -25
  128. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml +6 -6
  129. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +15 -17
  130. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +21 -21
  131. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml +7 -7
  132. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +5 -5
  133. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml +14 -14
  134. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +16 -17
  135. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +9 -9
  136. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +7 -14
  137. package/examples/sysml-diagram-samples/model/{catalog → methodology}/project.sysml +5 -5
  138. package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +1 -1
  139. package/examples/temperature-alarm/memo.identity.yaml +6 -0
  140. package/examples/temperature-alarm/memo.package.yaml +3 -1
  141. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +43 -21
  142. package/examples/temperature-alarm/model/{catalog → methodology}/project.sysml +4 -5
  143. package/examples/ui-screen-regions/memo.identity.yaml +33 -0
  144. package/examples/ui-screen-regions/memo.package.yaml +3 -1
  145. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +12 -12
  146. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +18 -18
  147. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +6 -6
  148. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +3 -3
  149. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +1 -1
  150. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +1 -1
  151. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +10 -10
  152. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +1 -1
  153. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +12 -12
  154. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +15 -15
  155. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +6 -6
  156. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +1 -2
  157. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +1 -2
  158. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +1 -2
  159. package/examples/ui-screen-regions/model/{catalog → methodology}/project.sysml +4 -5
  160. package/extensions/README.md +65 -16
  161. package/extensions/aadl/memo.package.yaml +1 -1
  162. package/extensions/aadl/src/aadl_extension.sysml +5 -2
  163. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +29 -50
  164. package/extensions/clinical/memo.package.yaml +1 -1
  165. package/extensions/clinical/src/clinical_extension.sysml +2 -0
  166. package/extensions/cloud/memo.package.yaml +1 -1
  167. package/extensions/container/memo.package.yaml +1 -1
  168. package/extensions/messaging/memo.package.yaml +1 -1
  169. package/extensions/messaging/src/messaging_extension.sysml +2 -2
  170. package/extensions/ros/memo.package.yaml +1 -1
  171. package/extensions/ros/src/ros_extension.sysml +25 -24
  172. package/extensions/template/memo.package.yaml +1 -1
  173. package/extensions/template/model/extension.sysml +25 -0
  174. package/memo.manifest.yaml +1 -7
  175. package/methodologies/default/memo.package.yaml +1 -1
  176. package/methodologies/gpca/memo.package.yaml +1 -1
  177. package/ontology/memo.package.yaml +1 -1
  178. package/package.json +6 -4
  179. package/profile/memo.package.yaml +1 -1
  180. package/src/architecture/decisions/memo_decisions.sysml +9 -2
  181. package/src/architecture/functional/behavior/memo_behavior.sysml +27 -7
  182. package/src/architecture/functional/functions/memo_functions.sysml +45 -31
  183. package/src/architecture/functional/memo_architecture_functional.sysml +14 -0
  184. package/src/architecture/implementation/memo_architecture_implementation.sysml +21 -0
  185. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +7 -0
  186. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +58 -17
  187. package/src/architecture/implementation/ui/memo_ui.sysml +1 -1
  188. package/src/architecture/logical/interfaces/memo_interfaces.sysml +67 -58
  189. package/src/architecture/logical/memo_architecture_logical.sysml +13 -0
  190. package/src/architecture/logical/structure/memo_logical_structure.sysml +27 -8
  191. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +4 -1
  192. package/src/architecture/operational/memo_architecture_operational.sysml +19 -0
  193. package/src/architecture/operational/scenarios/memo_scenarios.sysml +9 -8
  194. package/src/architecture/operational/structure/memo_operational.sysml +5 -2
  195. package/src/architecture/operational/use_cases/memo_use_cases.sysml +16 -8
  196. package/src/architecture/realization/deployment/memo_deployment.sysml +30 -10
  197. package/src/architecture/realization/memo_architecture_realization.sysml +13 -0
  198. package/src/architecture/realization/physical/memo_physical_architecture.sysml +61 -0
  199. package/src/architecture/variability/memo_variability.sysml +87 -0
  200. package/src/artifacts/configuration_management/memo_configuration_management.sysml +95 -3
  201. package/src/artifacts/core/memo_controlled_artifacts.sysml +4 -2
  202. package/src/artifacts/standards/cfr_21_820.sysml +12 -24
  203. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +13 -20
  204. package/src/artifacts/standards/iec_60601_1.sysml +16 -32
  205. package/src/artifacts/standards/iec_60601_1_2.sysml +5 -10
  206. package/src/artifacts/standards/iec_60812.sysml +4 -8
  207. package/src/artifacts/standards/iec_62304.sysml +607 -47
  208. package/src/artifacts/standards/iec_62366_1.sysml +12 -24
  209. package/src/artifacts/standards/iec_81001_5_1.sysml +8 -16
  210. package/src/artifacts/standards/iso_13485.sysml +12 -24
  211. package/src/artifacts/standards/iso_14971.sysml +118 -20
  212. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +3 -6
  213. package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +14 -4
  214. package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +1 -2
  215. package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +1 -2
  216. package/src/artifacts/templates/dhf/iec-62304/sad.md +1 -2
  217. package/src/artifacts/templates/dhf/iec-62304/sbom.md +1 -2
  218. package/src/artifacts/templates/dhf/iec-62304/sdp.md +1 -2
  219. package/src/artifacts/templates/dhf/iec-62304/soup.md +3 -5
  220. package/src/artifacts/templates/dhf/system/sad.md +1 -1
  221. package/src/artifacts/templates/dhf/system/standards-checklist.md +2 -2
  222. package/src/artifacts/templates/dhf/system/standards-traceability.md +1 -1
  223. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +339 -13
  224. package/src/assurance/human_factors/memo_human_factors.sysml +6 -2
  225. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +7 -3
  226. package/src/assurance/safety_risk/memo_risk.sysml +39 -1
  227. package/src/core/common/memo_common.sysml +61 -68
  228. package/src/core/enumerations/memo_enumerations.sysml +93 -9
  229. package/src/core/relationships/memo_relationships.sysml +17 -11
  230. package/src/core/relationships/memo_workspace_membership.sysml +284 -0
  231. package/src/core/semantics/semantics.sysml +58 -0
  232. package/src/core/terminology/terminology.sysml +7 -0
  233. package/src/memo_namespaces.sysml +6 -0
  234. package/src/methodology/archetypes/memo_archetypes.sysml +8 -16
  235. package/src/methodology/core/memo_core.sysml +85 -29
  236. package/src/methodology/profiles/memo_profiles.sysml +217 -61
  237. package/src/methodology/workflow/memo_workflow.sysml +28 -0
  238. package/src/rules/closure/closure_rules.sysml +250 -4
  239. package/src/rules/crosslayer/cross_layer_rules.sysml +11 -0
  240. package/src/rules/ontology/ontology_invariants.sysml +288 -48
  241. package/src/rules/quantitative/quantitative_rules.sysml +4 -0
  242. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +28 -28
  243. package/src/viewpoints/clinical/clinical_viewpoint.sysml +2 -3
  244. package/src/viewpoints/context/context_viewpoint.sysml +2 -3
  245. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +3 -5
  246. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +2 -3
  247. package/src/viewpoints/definitions/memo_view_layout.sysml +150 -0
  248. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +0 -4
  249. package/src/viewpoints/functional/functional_viewpoint.sysml +2 -3
  250. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +2 -4
  251. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +2 -4
  252. package/src/viewpoints/logical/logical_viewpoint.sysml +2 -3
  253. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +2 -4
  254. package/src/viewpoints/operational/operational_viewpoint.sysml +2 -3
  255. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +3 -5
  256. package/src/viewpoints/physical/physical_viewpoint.sysml +2 -3
  257. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +2 -4
  258. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +2 -4
  259. package/src/viewpoints/rendering/memo_rendering.sysml +50 -98
  260. package/src/viewpoints/requirements/requirements_viewpoint.sysml +2 -3
  261. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +2 -4
  262. package/src/viewpoints/risk/risk_viewpoint.sysml +2 -3
  263. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +2 -4
  264. package/src/viewpoints/software/software_viewpoint.sysml +2 -3
  265. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +3 -5
  266. package/src/viewpoints/stakeholders_concerns/memo_stakeholders_concerns.sysml +11 -29
  267. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +2 -3
  268. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +1 -1
  269. package/src/viewpoints/usability/usability_viewpoint.sysml +2 -3
  270. package/src/viewpoints/verification/verification_viewpoint.sysml +2 -3
  271. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +2 -4
  272. package/stage1/syside-67f92dc96ba75cd05b5c8d13.ids.gz +0 -0
  273. package/stage1/syside-67f92dc96ba75cd05b5c8d13.json.gz +0 -0
  274. package/templates/default/memo.package.yaml +6 -1
  275. package/templates/default/model/catalog/architecture/system.sysml +7 -3
  276. package/templates/default/model/{catalog → methodology}/project.sysml +3 -4
  277. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +0 -47
  278. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +0 -94
  279. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +0 -13
  280. package/examples/ui-screen-regions/model/catalog/relationships.sysml +0 -8
  281. package/extensions/aadl/src/methodology/aadl_methodology.sysml +0 -19
  282. package/extensions/clinical/src/methodology/clinical_methodology.sysml +0 -24
  283. package/extensions/cloud/src/methodology/cloud_methodology.sysml +0 -19
  284. package/extensions/container/src/methodology/container_methodology.sysml +0 -19
  285. package/extensions/messaging/src/methodology/messaging_methodology.sysml +0 -19
  286. package/extensions/ros/src/methodology/ros_methodology.sysml +0 -27
  287. package/extensions/template/src/extension.sysml +0 -39
  288. package/templates/connected-device/memo.package.yaml +0 -13
  289. package/templates/connected-device/model/catalog/architecture/system.sysml +0 -5
  290. package/templates/connected-device/model/catalog/artifacts/catalog.sysml +0 -5
  291. package/templates/connected-device/model/catalog/assurance/requirements.sysml +0 -7
  292. package/templates/connected-device/model/catalog/project.sysml +0 -30
  293. package/templates/connected-device/package.json +0 -8
  294. package/templates/connected-device/syside.toml +0 -13
  295. package/templates/infusion-pump/memo.package.yaml +0 -13
  296. package/templates/infusion-pump/model/catalog/architecture/system.sysml +0 -5
  297. package/templates/infusion-pump/model/catalog/artifacts/catalog.sysml +0 -5
  298. package/templates/infusion-pump/model/catalog/assurance/requirements.sysml +0 -7
  299. package/templates/infusion-pump/model/catalog/project.sysml +0 -30
  300. package/templates/infusion-pump/package.json +0 -8
  301. package/templates/infusion-pump/syside.toml +0 -13
  302. package/templates/monitoring-device/memo.package.yaml +0 -13
  303. package/templates/monitoring-device/model/catalog/architecture/system.sysml +0 -5
  304. package/templates/monitoring-device/model/catalog/artifacts/catalog.sysml +0 -5
  305. package/templates/monitoring-device/model/catalog/assurance/requirements.sysml +0 -7
  306. package/templates/monitoring-device/model/catalog/project.sysml +0 -30
  307. package/templates/monitoring-device/package.json +0 -8
  308. package/templates/monitoring-device/syside.toml +0 -13
  309. package/templates/samd/memo.package.yaml +0 -13
  310. package/templates/samd/model/catalog/architecture/system.sysml +0 -5
  311. package/templates/samd/model/catalog/artifacts/catalog.sysml +0 -5
  312. package/templates/samd/model/catalog/assurance/requirements.sysml +0 -7
  313. package/templates/samd/model/catalog/project.sysml +0 -30
  314. package/templates/samd/package.json +0 -8
  315. package/templates/samd/syside.toml +0 -13
@@ -0,0 +1,31 @@
1
+ // The system of systems: the robot cell, three independently
2
+ // developed and released systems working together for a procedure none of
3
+ // them performs alone. Only this level names the systems together.
4
+ package robot_cell_family_sos {
5
+ private import memo_core_common::*;
6
+ private import memo_core_common::MemoIdentity;
7
+ private import memo_architecture_logical_structure::*;
8
+ private import robot_cell_family_icds::*;
9
+ private import robot_cell_family_navigation::*;
10
+ private import robot_cell_family_manipulation::*;
11
+ private import robot_cell_family_perception::*;
12
+
13
+ part def RoboticCell specializes SystemOfSystems {
14
+ @MemoIdentity { :>> providedId = "RCF-SOS-001"; :>> label = "Robot Cell"; }
15
+ attribute :>> systemBoundaryDescription = "The navigation, manipulation and perception systems as used together in one workcell.";
16
+ attribute :>> constituentOwnership = "Each system is developed, released and approved on its own; the cell is the validated configuration of system releases.";
17
+
18
+ part navigation : NavigationSystem :> constituentSystem;
19
+ part manipulation : ManipulatorSystem :> constituentSystem;
20
+ part perception : PerceptionSystem :> constituentSystem;
21
+
22
+ interface pointCloudFeed : PerceptionToNavigationIcd
23
+ connect perception.pPointCloudOut to navigation.pPointCloudIn;
24
+ interface graspEventFeed : ManipulationToNavigationIcd
25
+ connect manipulation.pGraspEventOut to navigation.pGraspEventIn;
26
+ }
27
+
28
+ part robotCell : RoboticCell {
29
+ @MemoIdentity { :>> providedId = "RCF-SOS-002"; :>> label = "Robot Cell"; }
30
+ }
31
+ }
@@ -0,0 +1,25 @@
1
+ // Clinical use cases: their subject is the system of systems, and each
2
+ // includes the system use cases it is made of.
3
+ package robot_cell_family_operational_use_cases {
4
+ private import memo_core_common::*;
5
+ private import memo_core_common::MemoIdentity;
6
+ private import memo_core_enumerations::*;
7
+ private import memo_architecture_operational_use_cases::*;
8
+ private import robot_cell_family_shared::*;
9
+ private import robot_cell_family_sos::*;
10
+ private import robot_cell_family_navigation::*;
11
+ private import robot_cell_family_manipulation::*;
12
+ private import robot_cell_family_perception::*;
13
+
14
+ use case ucPerformPickAndPlace : UseCase {
15
+ @MemoIdentity { :>> providedId = "RCF-UC-001"; :>> label = "Perform Pick And Place"; }
16
+ attribute :>> useCaseKind = UseCaseKind::clinical;
17
+ attribute :>> goalStatement = "Move a workpiece by mapping the cell and grasping it.";
18
+ subject :>> supportingSystem = robotCell;
19
+ actor operator = cellOperator;
20
+ actor assistant = cellTechnician;
21
+ include ucRecordRun { subject :>> supportingSystem = robotCell.perception; }
22
+ include ucAcquireMap { subject :>> supportingSystem = robotCell.navigation; }
23
+ include ucExecuteGrasp { subject :>> supportingSystem = robotCell.manipulation; }
24
+ }
25
+ }
@@ -0,0 +1,35 @@
1
+ // The manipulator: grasps a workpiece with its gripper and reports each grasp. It imports the family's shared package
2
+ // only.
3
+ package robot_cell_family_manipulation {
4
+ private import memo_core_common::*;
5
+ private import memo_core_common::MemoIdentity;
6
+ private import memo_core_enumerations::*;
7
+ private import memo_architecture_logical_structure::*;
8
+ private import memo_architecture_functional_functions::*;
9
+ private import memo_architecture_operational_use_cases::*;
10
+ private import robot_cell_family_shared::*;
11
+
12
+ part def ManipulatorSystem specializes System {
13
+ @MemoIdentity { :>> providedId = "RCF-MAN-001"; :>> label = "Manipulator System"; }
14
+ attribute :>> systemBoundaryDescription = "Arm controller, teach pendant and the gripper drive cable.";
15
+ port pGraspEventOut : GraspEventPort;
16
+ part motionController : LogicalComponent :> component {
17
+ @MemoIdentity { :>> providedId = "RCF-MAN-LC-001"; :>> label = "Motion Controller"; }
18
+ attribute :>> responsibility = "Regulate delivered power and duration, and report each delivery.";
19
+ }
20
+ allocate fnExecuteGrasp to motionController;
21
+ }
22
+
23
+ action fnExecuteGrasp : SystemFunction {
24
+ @MemoIdentity { :>> providedId = "RCF-MAN-F-001"; :>> label = "Execute Grasp"; }
25
+ out graspEventOut : GraspEvent;
26
+ attribute :>> outputSummary = "Grasp made within the set force and time limits, and the event that records it";
27
+ }
28
+
29
+ use case ucExecuteGrasp : UseCase {
30
+ @MemoIdentity { :>> providedId = "RCF-MAN-UC-001"; :>> label = "Execute Grasp"; }
31
+ attribute :>> useCaseKind = UseCaseKind::clinical;
32
+ subject :>> supportingSystem : ManipulatorSystem;
33
+ actor operator = cellOperator;
34
+ }
35
+ }
@@ -0,0 +1,46 @@
1
+ // The navigation system: builds an occupancy map of the cell from the
2
+ // robot's pose and paints the recorded range data onto it. It imports the
3
+ // family's shared package only.
4
+ package robot_cell_family_navigation {
5
+ private import memo_core_common::*;
6
+ private import memo_core_common::MemoIdentity;
7
+ private import memo_core_enumerations::*;
8
+ private import memo_architecture_logical_structure::*;
9
+ private import memo_architecture_functional_functions::*;
10
+ private import memo_architecture_operational_use_cases::*;
11
+ private import robot_cell_family_shared::*;
12
+
13
+ part def NavigationSystem specializes System {
14
+ @MemoIdentity { :>> providedId = "RCF-NAV-001"; :>> label = "Navigation System"; }
15
+ attribute :>> systemBoundaryDescription = "Navigation workstation, pose sensing and the operator interface unit.";
16
+ part safetyRelay : SafetyRelayModule :> component;
17
+ port pPointCloudIn : ~PointCloudPort;
18
+ port pGraspEventIn : ~GraspEventPort;
19
+ part mapEngine : LogicalComponent :> component {
20
+ @MemoIdentity { :>> providedId = "RCF-NAV-LC-001"; :>> label = "Map Engine"; }
21
+ attribute :>> responsibility = "Reconstruct the cell map and annotate it with scan times and grasps.";
22
+ }
23
+ allocate fnBuildMap to mapEngine;
24
+ allocate fnTagGrasp to mapEngine;
25
+ }
26
+
27
+ action fnBuildMap : SystemFunction {
28
+ @MemoIdentity { :>> providedId = "RCF-NAV-F-001"; :>> label = "Build Occupancy Map"; }
29
+ in pointCloudIn : PointCloud;
30
+ out locationOut : RobotPose;
31
+ attribute :>> outputSummary = "Cell map with local scan times";
32
+ }
33
+ action fnTagGrasp : SystemFunction {
34
+ @MemoIdentity { :>> providedId = "RCF-NAV-F-002"; :>> label = "Tag Grasp On Map"; }
35
+ in graspEventIn : GraspEvent;
36
+ attribute :>> outputSummary = "Grasp marker at the robot pose of each grasp";
37
+ }
38
+
39
+ // A system use case: its subject is this system.
40
+ use case ucAcquireMap : UseCase {
41
+ @MemoIdentity { :>> providedId = "RCF-NAV-UC-001"; :>> label = "Acquire Occupancy Map"; }
42
+ attribute :>> useCaseKind = UseCaseKind::clinical;
43
+ subject :>> supportingSystem : NavigationSystem;
44
+ actor operator = cellOperator;
45
+ }
46
+ }
@@ -0,0 +1,37 @@
1
+ // The perception system: acquires and displays depth-camera and lidar
2
+ // signals, and marks procedure events on the perception. It imports the
3
+ // family's shared package only.
4
+ package robot_cell_family_perception {
5
+ private import memo_core_common::*;
6
+ private import memo_core_common::MemoIdentity;
7
+ private import memo_core_enumerations::*;
8
+ private import memo_architecture_logical_structure::*;
9
+ private import memo_architecture_functional_functions::*;
10
+ private import memo_architecture_operational_use_cases::*;
11
+ private import robot_cell_family_shared::*;
12
+
13
+ part def PerceptionSystem specializes System {
14
+ @MemoIdentity { :>> providedId = "RCF-PER-001"; :>> label = "Perception System"; }
15
+ attribute :>> systemBoundaryDescription = "Amplifier, perception workstation and review display.";
16
+ part safetyRelay : SafetyRelayModule :> component;
17
+ port pPointCloudOut : PointCloudPort;
18
+ part sensorHub : LogicalComponent :> component {
19
+ @MemoIdentity { :>> providedId = "RCF-PER-LC-001"; :>> label = "Sensor Hub"; }
20
+ attribute :>> responsibility = "Filter and timestamp the camera and lidar range data.";
21
+ }
22
+ allocate fnAcquirePointClouds to sensorHub;
23
+ }
24
+
25
+ action fnAcquirePointClouds : SystemFunction {
26
+ @MemoIdentity { :>> providedId = "RCF-PER-F-001"; :>> label = "Acquire Point Clouds"; }
27
+ out pointCloudOut : PointCloud;
28
+ attribute :>> outputSummary = "Filtered, timestamped point clouds";
29
+ }
30
+
31
+ use case ucRecordRun : UseCase {
32
+ @MemoIdentity { :>> providedId = "RCF-PER-UC-001"; :>> label = "Record Run Data"; }
33
+ attribute :>> useCaseKind = UseCaseKind::clinical;
34
+ subject :>> supportingSystem : PerceptionSystem;
35
+ actor operator = cellTechnician;
36
+ }
37
+ }
@@ -0,0 +1,3 @@
1
+ name: robot-platform
2
+ version: 1.0.0
3
+ sysmlDir: model
@@ -0,0 +1,15 @@
1
+ // The parts every product of the robot cell family shares, versioned on their own.
2
+ // A family model depends on this package (`dependencies:` in its
3
+ // memo.package.yaml) and builds on these definitions; it never edits them. A
4
+ // change here is a new version of the platform, which each family adopts when
5
+ // it chooses to.
6
+ package robot_platform {
7
+ private import memo_core_common::*;
8
+ private import memo_core_common::MemoIdentity;
9
+ private import memo_architecture_logical_structure::*;
10
+
11
+ part def SafetyRelayModule specializes LogicalComponent {
12
+ @MemoIdentity { :>> providedId = "RCF-LC-001"; :>> label = "Safety Relay Module"; }
13
+ attribute :>> responsibility = "Isolate the safety-rated circuits from the motion drives' mains supply.";
14
+ }
15
+ }
@@ -6,10 +6,11 @@ a ROS 2 mobile logistics robot; the point is the mechanism.
6
6
  Extensions are a way to model, so they live in [`extensions/`](../../extensions),
7
7
  beside the ontology. This project is one of their consumers.
8
8
 
9
- - `model/catalog/project.sysml` — the binding. It lists three extension modules
10
- (`memo_extension_messaging`, `memo_extension_container`, `memo_extension_ros`)
11
- in `includedModule`. That is how extensions compose: at the project binding,
12
- never by chaining methodologies.
9
+ - `model/methodology/project.sysml` — the binding, and one import:
10
+ `public import memo_extension_ros::*;`. That import is how the project brings
11
+ the extension in. ROS publicly imports the messaging and container
12
+ extensions it builds on, so the one import selects all three. The project
13
+ never retypes an extension's package names.
13
14
  - `model/catalog/ros_mobile_robot.sysml` — the model.
14
15
  - `model/catalog/viewpoints/` — diagram views over that catalog.
15
16
 
@@ -0,0 +1,94 @@
1
+ # memo.identity.yaml — element identity registry (auto-generated)
2
+ # Assigned once and never reassigned. COMMIT THIS FILE: deleting it does
3
+ # not regenerate the same identities, it mints new ones, and every
4
+ # external reference to a shortId or uuid then points at nothing.
5
+ # Entries for deleted elements are retained so their numbers stay retired.
6
+
7
+ elements:
8
+ "memo_examples_ros_mobile_robot::EmergencyStop":
9
+ shortId: "ROS-1"
10
+ uuid: "bb569605-71bd-558a-8d8f-5d02597a42c0"
11
+ "memo_examples_ros_mobile_robot::LaserScan":
12
+ shortId: "ROS-4"
13
+ uuid: "35aa37b0-540e-5fe9-b8dc-0e5bfec683fe"
14
+ "memo_examples_ros_mobile_robot::VelocityCommand":
15
+ shortId: "ROS-20"
16
+ uuid: "9ed2d72e-6ff7-58c9-9d68-3fe453d67aca"
17
+ "memo_examples_ros_mobile_robot::imageRuntime":
18
+ shortId: "ROS-2"
19
+ uuid: "0ae81bfb-b63c-5182-b8bf-163448a2c10f"
20
+ "memo_examples_ros_mobile_robot::imageSafety":
21
+ shortId: "ROS-3"
22
+ uuid: "8e5cbd7a-e974-5770-b310-1ef0a5b5a365"
23
+ "memo_examples_ros_mobile_robot::nodeComputeUnit":
24
+ shortId: "PRC-1"
25
+ uuid: "f012f4cf-3bbc-5e13-a921-be8b084f81ee"
26
+ "memo_examples_ros_mobile_robot::nodeLidar":
27
+ shortId: "ROS-5"
28
+ uuid: "21dc80f4-ce6c-570a-a5da-bf508e98ef73"
29
+ "memo_examples_ros_mobile_robot::nodeLidar::scanPublisher":
30
+ shortId: "ROS-6"
31
+ uuid: "d8a1e19c-72b5-5cce-a10f-874f3a5dc02f"
32
+ "memo_examples_ros_mobile_robot::nodeNavigation":
33
+ shortId: "ROS-7"
34
+ uuid: "d9f9dcbd-f4c2-5dcf-836b-948fdbbe9629"
35
+ "memo_examples_ros_mobile_robot::nodeNavigation::cmdVelPublisher":
36
+ shortId: "ROS-8"
37
+ uuid: "bfcde2bd-2223-5840-b518-8e8716230ee5"
38
+ "memo_examples_ros_mobile_robot::nodeNavigation::estopSubscriber":
39
+ shortId: "ROS-9"
40
+ uuid: "44c5472a-ec14-58f6-9563-33af35e4b53b"
41
+ "memo_examples_ros_mobile_robot::nodeNavigation::navigateActionServer":
42
+ shortId: "ROS-10"
43
+ uuid: "11f058bf-c4c9-5c25-a8be-d2e0b20ba9bd"
44
+ "memo_examples_ros_mobile_robot::nodeNavigation::scanSubscriber":
45
+ shortId: "ROS-11"
46
+ uuid: "0b57eed5-6185-51f0-9506-cfe20bd61119"
47
+ "memo_examples_ros_mobile_robot::nodeNavigation::setModeClient":
48
+ shortId: "ROS-12"
49
+ uuid: "8bd0f7ca-9ed1-5060-b68a-5c5a8ceb8d12"
50
+ "memo_examples_ros_mobile_robot::nodeSafetyMonitor":
51
+ shortId: "ROS-13"
52
+ uuid: "fadad110-7e55-57ee-b8cd-2f72daae72d4"
53
+ "memo_examples_ros_mobile_robot::nodeSafetyMonitor::cmdVelSubscriber":
54
+ shortId: "ROS-14"
55
+ uuid: "34228a62-3284-5cd5-8889-2defd6592e74"
56
+ "memo_examples_ros_mobile_robot::nodeSafetyMonitor::estopPublisher":
57
+ shortId: "ROS-15"
58
+ uuid: "37e91073-360b-5396-8e55-866abd8e0008"
59
+ "memo_examples_ros_mobile_robot::nodeSafetyMonitor::navigateActionClient":
60
+ shortId: "ROS-16"
61
+ uuid: "62b35d0e-c601-538e-93c0-8da00b29c46d"
62
+ "memo_examples_ros_mobile_robot::nodeSafetyMonitor::scanSubscriber":
63
+ shortId: "ROS-17"
64
+ uuid: "49c042fd-58d3-5cd8-82b0-1757476cf833"
65
+ "memo_examples_ros_mobile_robot::nodeSafetyMonitor::setModeServer":
66
+ shortId: "ROS-18"
67
+ uuid: "f04940de-0500-58bd-8c71-3e5d66196d2a"
68
+ "memo_examples_ros_mobile_robot::rosRuntime":
69
+ shortId: "ROS-19"
70
+ uuid: "a3ba9180-e001-5638-8694-5919ef5d2d77"
71
+ "memo_examples_ros_mobile_robot::swNavigation":
72
+ shortId: "SFT-1"
73
+ uuid: "12d88ff9-af9f-5ecb-b5bd-bc08258c1c5a"
74
+ "memo_examples_ros_mobile_robot::swPerception":
75
+ shortId: "SFT-2"
76
+ uuid: "fc44adfc-23e0-5659-b3e3-f8b9f7a72613"
77
+ "memo_examples_ros_mobile_robot::swSafety":
78
+ shortId: "SFT-3"
79
+ uuid: "874c7b51-bef4-50df-b6d0-9709705fd19d"
80
+ "memo_examples_ros_mobile_robot::topicCmdVel":
81
+ shortId: "VLC-1"
82
+ uuid: "1ba4eaf0-6bff-5dab-bbe0-66ed67239c77"
83
+ "memo_examples_ros_mobile_robot::topicEstop":
84
+ shortId: "EMR-1"
85
+ uuid: "1e1f00fe-d949-5a94-afa2-5c6a1137bfb9"
86
+ "memo_examples_ros_mobile_robot::topicScan":
87
+ shortId: "LSR-1"
88
+ uuid: "c8ac13a6-8e7c-54d6-ab31-8df0f9dfefb5"
89
+ "memo_examples_ros_mobile_robot_project::projectBinding":
90
+ shortId: "PRJ-1"
91
+ uuid: "9069eae9-45bc-55b1-a346-fe1526be939e"
92
+ "memo_examples_ros_mobile_robot_viewpoints_unassigned_views_ros_mobile_robot_overview::rosMobileRobotOverview":
93
+ shortId: "MMX-1"
94
+ uuid: "2f4b2bc1-7d42-51a8-912b-28cabe8b6615"
@@ -1,3 +1,5 @@
1
1
  name: ros-mobile-robot
2
- entrypoint: model/catalog/project.sysml
2
+ entrypoint: model/methodology/project.sysml
3
3
  include: [model]
4
+ toolchain:
5
+ packager: internal
@@ -47,31 +47,31 @@ package memo_examples_ros_mobile_robot {
47
47
  }
48
48
 
49
49
  item topicScan : LaserScan {
50
- @MemoIdentity { :>> providedId = "RMR-TP-001"; } attribute :>> name = "ScanTopic";
50
+ @MemoIdentity { :>> providedId = "RMR-TP-001"; :>> label = "ScanTopic"; }
51
51
  }
52
52
  item topicCmdVel : VelocityCommand {
53
- @MemoIdentity { :>> providedId = "RMR-TP-002"; } attribute :>> name = "CmdVelTopic";
53
+ @MemoIdentity { :>> providedId = "RMR-TP-002"; :>> label = "CmdVelTopic"; }
54
54
  }
55
55
  item topicEstop : EmergencyStop {
56
- @MemoIdentity { :>> providedId = "RMR-TP-003"; } attribute :>> name = "EmergencyStopTopic";
56
+ @MemoIdentity { :>> providedId = "RMR-TP-003"; :>> label = "EmergencyStopTopic"; }
57
57
  }
58
58
 
59
59
  // ── Code ────────────────────────────────────────────────────────────
60
60
  part swPerception : SoftwareModule {
61
61
  attribute :>> moduleKind = ModuleKind::unit;
62
- @MemoIdentity { :>> providedId = "RMR-SW-001"; } attribute :>> name = "PerceptionStack";
62
+ @MemoIdentity { :>> providedId = "RMR-SW-001"; :>> label = "PerceptionStack"; }
63
63
  attribute :>> responsibility = "Lidar driver and obstacle segmentation.";
64
64
  attribute :>> safetyClass = SafetyClassKind::B;
65
65
  }
66
66
  part swNavigation : SoftwareModule {
67
67
  attribute :>> moduleKind = ModuleKind::unit;
68
- @MemoIdentity { :>> providedId = "RMR-SW-002"; } attribute :>> name = "NavigationStack";
68
+ @MemoIdentity { :>> providedId = "RMR-SW-002"; :>> label = "NavigationStack"; }
69
69
  attribute :>> responsibility = "Global and local planning; velocity command generation.";
70
70
  attribute :>> safetyClass = SafetyClassKind::B;
71
71
  }
72
72
  part swSafety : SoftwareModule {
73
73
  attribute :>> moduleKind = ModuleKind::unit;
74
- @MemoIdentity { :>> providedId = "RMR-SW-003"; } attribute :>> name = "SafetyMonitor";
74
+ @MemoIdentity { :>> providedId = "RMR-SW-003"; :>> label = "SafetyMonitor"; }
75
75
  attribute :>> responsibility = "Independent watchdog: stops the base on obstacle proximity or missing heartbeat.";
76
76
  attribute :>> safetyClass = SafetyClassKind::C;
77
77
  }
@@ -84,7 +84,7 @@ package memo_examples_ros_mobile_robot {
84
84
  // is exactly what an extension type must NOT decide for the modeller.
85
85
  part nodeLidar : RosNode {
86
86
  attribute :>> runtimeKind = RuntimeKind::thread;
87
- @MemoIdentity { :>> providedId = "RMR-ND-001"; } attribute :>> name = "LidarDriverNode";
87
+ @MemoIdentity { :>> providedId = "RMR-ND-001"; :>> label = "LidarDriverNode"; }
88
88
  attribute :>> nodeNamespace = "/robot/perception";
89
89
  attribute :>> lifecycleManaged = true;
90
90
  attribute :>> executorModel = "single-threaded executor, composed";
@@ -96,7 +96,6 @@ package memo_examples_ros_mobile_robot {
96
96
  attribute :>> deliverySemantics = MessagingDeliveryKind::atMostOnce;
97
97
  attribute :>> publishRateHz = 20.0;
98
98
  attribute :>> offeredQos {
99
- attribute :>> reliability = RosReliabilityKind::bestEffort;
100
99
  attribute :>> durability = RosDurabilityKind::volatile;
101
100
  attribute :>> deadlineMs = 60.0;
102
101
  attribute :>> livelinessLeaseMs = 200.0;
@@ -106,7 +105,7 @@ package memo_examples_ros_mobile_robot {
106
105
  }
107
106
  part nodeNavigation : RosNode {
108
107
  attribute :>> runtimeKind = RuntimeKind::thread;
109
- @MemoIdentity { :>> providedId = "RMR-ND-002"; } attribute :>> name = "NavigationNode";
108
+ @MemoIdentity { :>> providedId = "RMR-ND-002"; :>> label = "NavigationNode"; }
110
109
  attribute :>> nodeNamespace = "/robot/navigation";
111
110
  attribute :>> lifecycleManaged = true;
112
111
  attribute :>> executorModel = "multi-threaded executor, composed";
@@ -118,7 +117,6 @@ package memo_examples_ros_mobile_robot {
118
117
  attribute :>> deliverySemantics = MessagingDeliveryKind::atMostOnce;
119
118
  attribute :>> lossBehaviour = "hold the last costmap for 200 ms, then command zero velocity";
120
119
  attribute :>> requestedQos {
121
- attribute :>> reliability = RosReliabilityKind::bestEffort;
122
120
  attribute :>> durability = RosDurabilityKind::volatile;
123
121
  attribute :>> deadlineMs = 60.0;
124
122
  attribute :>> livelinessLeaseMs = 200.0;
@@ -130,7 +128,6 @@ package memo_examples_ros_mobile_robot {
130
128
  attribute :>> deliverySemantics = MessagingDeliveryKind::atLeastOnce;
131
129
  attribute :>> publishRateHz = 10.0;
132
130
  attribute :>> offeredQos {
133
- attribute :>> reliability = RosReliabilityKind::reliable;
134
131
  attribute :>> durability = RosDurabilityKind::volatile;
135
132
  attribute :>> deadlineMs = 150.0;
136
133
  attribute :>> livelinessLeaseMs = 300.0;
@@ -142,7 +139,6 @@ package memo_examples_ros_mobile_robot {
142
139
  attribute :>> deliverySemantics = MessagingDeliveryKind::atLeastOnce;
143
140
  attribute :>> lossBehaviour = "no publisher within the liveliness lease is treated as stop asserted";
144
141
  attribute :>> requestedQos {
145
- attribute :>> reliability = RosReliabilityKind::reliable;
146
142
  attribute :>> durability = RosDurabilityKind::transientLocal;
147
143
  attribute :>> deadlineMs = 100.0;
148
144
  attribute :>> livelinessLeaseMs = 200.0;
@@ -151,7 +147,6 @@ package memo_examples_ros_mobile_robot {
151
147
  }
152
148
  inout port setModeClient : RosServiceClient {
153
149
  attribute :>> serviceName = "/robot/safety/set_mode";
154
- attribute :>> timeoutMs = 500.0;
155
150
  }
156
151
  inout port navigateActionServer : RosActionServer {
157
152
  attribute :>> actionName = "/robot/navigation/navigate_to_pose";
@@ -159,7 +154,7 @@ package memo_examples_ros_mobile_robot {
159
154
  }
160
155
  part nodeSafetyMonitor : RosNode {
161
156
  attribute :>> runtimeKind = RuntimeKind::process;
162
- @MemoIdentity { :>> providedId = "RMR-ND-003"; } attribute :>> name = "SafetyMonitorNode";
157
+ @MemoIdentity { :>> providedId = "RMR-ND-003"; :>> label = "SafetyMonitorNode"; }
163
158
  attribute :>> nodeNamespace = "/robot/safety";
164
159
  attribute :>> lifecycleManaged = false;
165
160
  attribute :>> executorModel = "own process, real-time priority";
@@ -173,18 +168,29 @@ package memo_examples_ros_mobile_robot {
173
168
  ref :>> topic = topicScan;
174
169
  attribute :>> deliverySemantics = MessagingDeliveryKind::atMostOnce;
175
170
  attribute :>> lossBehaviour = "two consecutive misses assert the stop";
171
+ attribute :>> requestedQos {
172
+ attribute :>> durability = RosDurabilityKind::volatile;
173
+ attribute :>> deadlineMs = 60.0;
174
+ attribute :>> livelinessLeaseMs = 200.0;
175
+ attribute :>> historyDepth = 5;
176
+ }
176
177
  }
177
178
  in port cmdVelSubscriber : RosSubscriber {
178
179
  ref :>> topic = topicCmdVel;
179
180
  attribute :>> deliverySemantics = MessagingDeliveryKind::atLeastOnce;
180
181
  attribute :>> lossBehaviour = "missing velocity commands assert the stop";
182
+ attribute :>> requestedQos {
183
+ attribute :>> durability = RosDurabilityKind::volatile;
184
+ attribute :>> deadlineMs = 150.0;
185
+ attribute :>> livelinessLeaseMs = 300.0;
186
+ attribute :>> historyDepth = 1;
187
+ }
181
188
  }
182
189
  out port estopPublisher : RosPublisher {
183
190
  ref :>> topic = topicEstop;
184
191
  attribute :>> deliverySemantics = MessagingDeliveryKind::atLeastOnce;
185
192
  attribute :>> publishRateHz = 50.0;
186
193
  attribute :>> offeredQos {
187
- attribute :>> reliability = RosReliabilityKind::reliable;
188
194
  attribute :>> durability = RosDurabilityKind::transientLocal;
189
195
  attribute :>> deadlineMs = 100.0;
190
196
  attribute :>> livelinessLeaseMs = 200.0;
@@ -209,38 +215,29 @@ package memo_examples_ros_mobile_robot {
209
215
  // ── Native topic, service, and action interfaces ───────────────────
210
216
  interface scanToNavigation : RosTopicInterface
211
217
  connect nodeLidar.scanPublisher to nodeNavigation.scanSubscriber {
212
- attribute :>> direction = DirectionKind::output;
213
218
  }
214
219
  interface scanToSafety : RosTopicInterface
215
220
  connect nodeLidar.scanPublisher to nodeSafetyMonitor.scanSubscriber {
216
- attribute :>> direction = DirectionKind::output;
217
221
  }
218
222
  interface cmdVelToSafety : RosTopicInterface
219
223
  connect nodeNavigation.cmdVelPublisher to nodeSafetyMonitor.cmdVelSubscriber {
220
- attribute :>> direction = DirectionKind::output;
221
224
  }
222
225
  interface estopToNavigation : RosTopicInterface
223
226
  connect nodeSafetyMonitor.estopPublisher to nodeNavigation.estopSubscriber {
224
- attribute :>> direction = DirectionKind::output;
225
227
  }
226
228
 
227
- flow of LaserScan from nodeLidar.scanPublisher.payload to nodeNavigation.scanSubscriber.payload;
228
- flow of LaserScan from nodeLidar.scanPublisher.payload to nodeSafetyMonitor.scanSubscriber.payload;
229
- flow of VelocityCommand from nodeNavigation.cmdVelPublisher.payload to nodeSafetyMonitor.cmdVelSubscriber.payload;
230
- flow of EmergencyStop from nodeSafetyMonitor.estopPublisher.payload to nodeNavigation.estopSubscriber.payload;
231
229
 
232
230
  interface setModeService : RosServiceInterface
233
231
  connect nodeNavigation.setModeClient to nodeSafetyMonitor.setModeServer {
234
- attribute :>> direction = DirectionKind::inputOutput;
232
+ attribute :>> timeoutMs = 500.0;
235
233
  }
236
234
  interface navigateAction : RosActionInterface
237
235
  connect nodeSafetyMonitor.navigateActionClient to nodeNavigation.navigateActionServer {
238
- attribute :>> direction = DirectionKind::inputOutput;
239
236
  }
240
237
 
241
238
  // ── Deployment: base relations, unchanged ───────────────────────────
242
239
  part imageRuntime : RosContainerImage {
243
- @MemoIdentity { :>> providedId = "RMR-DU-001"; } attribute :>> name = "RobotRuntimeImage";
240
+ @MemoIdentity { :>> providedId = "RMR-DU-001"; :>> label = "RobotRuntimeImage"; }
244
241
  attribute :>> unitKind = "OCI container image";
245
242
  attribute :>> imageReference = "registry.example.com/robot-runtime:2.3.0";
246
243
  attribute :>> registry = "registry.example.com";
@@ -251,7 +248,7 @@ package memo_examples_ros_mobile_robot {
251
248
  attribute :>> integrityProtection = "image signature + SBOM attestation";
252
249
  }
253
250
  part imageSafety : RosContainerImage {
254
- @MemoIdentity { :>> providedId = "RMR-DU-002"; } attribute :>> name = "SafetyMonitorImage";
251
+ @MemoIdentity { :>> providedId = "RMR-DU-002"; :>> label = "SafetyMonitorImage"; }
255
252
  attribute :>> unitKind = "OCI container image";
256
253
  attribute :>> imageReference = "registry.example.com/safety-monitor:2.3.0";
257
254
  attribute :>> registry = "registry.example.com";
@@ -266,7 +263,7 @@ package memo_examples_ros_mobile_robot {
266
263
  allocation : BuildsInto allocate swSafety to imageSafety;
267
264
 
268
265
  part nodeComputeUnit : ProcessingNode {
269
- @MemoIdentity { :>> providedId = "RMR-HW-001"; } attribute :>> name = "OnboardComputeUnit";
266
+ @MemoIdentity { :>> providedId = "RMR-HW-001"; :>> label = "OnboardComputeUnit"; }
270
267
  attribute :>> nodeKind = ProcessingNodeKind::SoC;
271
268
  attribute :>> processorArchitecture = "arm64, 8 core";
272
269
  attribute :>> memoryMB = "16384";
@@ -282,7 +279,7 @@ package memo_examples_ros_mobile_robot {
282
279
  }
283
280
 
284
281
  part rosRuntime : RosContainerRuntime {
285
- @MemoIdentity { :>> providedId = "RMR-RT-001"; } attribute :>> name = "OnboardRosRuntime";
282
+ @MemoIdentity { :>> providedId = "RMR-RT-001"; :>> label = "OnboardRosRuntime"; }
286
283
  attribute :>> environmentKind = "container runtime";
287
284
  attribute :>> osOrRtos = "Linux with PREEMPT_RT";
288
285
  attribute :>> orchestrationPlatform = "systemd-managed compose, no cluster orchestrator";
@@ -1,4 +1,4 @@
1
- // ROS Mobile Robot — project identity and method binding.
1
+ // ROS Mobile Robot — model identity and method binding.
2
2
  //
3
3
  // The native entrypoint. The imports name what this project contains and the
4
4
  // binding names the methodology it is governed by. No YAML file participates.
@@ -16,20 +16,14 @@ package memo_examples_ros_mobile_robot_project {
16
16
 
17
17
  private import memo_core_common::*;
18
18
  private import memo_core_common::MemoIdentity;
19
- part projectBinding : ProjectMethodBinding {
20
- @MemoIdentity { :>> providedId = "PMB-ROS-MOBILE-ROBOT-001"; }
21
- attribute :>> name = "RosMobileRobotProjectMethodBinding";
22
- attribute :>> projectName = "ROS Mobile Robot";
19
+ // The ROS extension, brought into the project by importing it. The import
20
+ // is public, so it is the project's selection as well as its vocabulary;
21
+ // ROS publicly imports messaging and container, which come with it.
22
+ public import memo_extension_ros::*;
23
+ part projectBinding : ModelMethodBinding {
24
+ @MemoIdentity { :>> providedId = "PMB-ROS-MOBILE-ROBOT-001"; :>> label = "RosMobileRobotModelMethodBinding"; }
25
+ attribute :>> modelName = "ROS Mobile Robot";
23
26
  ref :>> selectedMethodology = mdDefaultDefinition;
24
27
  attribute :>> scopeMode = ScopeModeKind::explicit;
25
- // This is the composition mechanism: three independent extensions,
26
- // listed here. `includedModule` is [0..*] on both MethodologyDefinition
27
- // and ProjectMethodBinding, while `baseMethodology` is [0..1] — so
28
- // extensions combine at the binding and never by chaining.
29
- attribute :>> includedModule = (
30
- "memo_extension_messaging",
31
- "memo_extension_container",
32
- "memo_extension_ros"
33
- );
34
28
  }
35
29
  }
@@ -1,3 +1,5 @@
1
1
  name: software-only-medical-device
2
- entrypoint: model/catalog/project.sysml
2
+ entrypoint: model/methodology/project.sysml
3
3
  include: [model]
4
+ toolchain:
5
+ packager: internal
@@ -21,30 +21,29 @@ package memo_examples_software_only_medical_device {
21
21
  private import memo_core_common::*;
22
22
  private import memo_core_common::MemoIdentity;
23
23
  part swScreeningApp : SoftwareSystem {
24
- @MemoIdentity { :>> providedId = "SMD-SW-001"; } attribute :>> name = "ScreeningApplication";
24
+ @MemoIdentity { :>> providedId = "SMD-SW-001"; :>> label = "ScreeningApplication"; }
25
25
  attribute :>> safetyClass = SafetyClassKind::B;
26
26
  attribute :>> version = "1.4.0";
27
27
  }
28
28
  part algGrading : Algorithm {
29
- @MemoIdentity { :>> providedId = "SMD-ALG-001"; } attribute :>> name = "RetinopathyGradingModel";
29
+ @MemoIdentity { :>> providedId = "SMD-ALG-001"; :>> label = "RetinopathyGradingModel"; }
30
30
  attribute :>> algorithmKind = "convolutional neural network, locked (non-adaptive)";
31
31
  attribute :>> clinicalPerformanceClaim = "sensitivity >= 87%, specificity >= 90% vs. reference standard";
32
32
  }
33
- part soupInference : SoftwareModule {
34
- attribute :>> moduleKind = ModuleKind::soup;
35
- @MemoIdentity { :>> providedId = "SMD-SOUP-001"; } attribute :>> name = "InferenceRuntimeLibrary";
36
- attribute :>> soupVendor = "third-party OSS";
33
+ part soupInference : OTSSoftwareModule {
34
+ @MemoIdentity { :>> providedId = "SMD-SOUP-001"; :>> label = "InferenceRuntimeLibrary"; }
35
+ attribute :>> supplier = "third-party OSS";
37
36
  attribute :>> soupClassification = SOUPClassificationKind::classB;
38
37
  }
39
38
  part swGradingModule : SoftwareModule {
40
- @MemoIdentity { :>> providedId = "SMD-SW-002"; } attribute :>> name = "GradingModule";
39
+ @MemoIdentity { :>> providedId = "SMD-SW-002"; :>> label = "GradingModule"; }
41
40
  attribute :>> responsibility = "Wraps the grading model behind the service API; owns input validation and result structuring.";
42
41
  attribute :>> safetyClass = SafetyClassKind::B;
43
42
  }
44
43
  dependency swGradingModule to soupInference;
45
44
 
46
45
  part svcGrading : CloudService {
47
- @MemoIdentity { :>> providedId = "SMD-RT-001"; } attribute :>> name = "GradingService";
46
+ @MemoIdentity { :>> providedId = "SMD-RT-001"; :>> label = "GradingService"; }
48
47
  attribute :>> serviceContract = "REST /grade: image in, structured finding out";
49
48
  attribute :>> discoveryMechanism = "DNS name behind the cluster ingress";
50
49
  attribute :>> updatePolicy = "blue/green rollout";
@@ -53,12 +52,12 @@ package memo_examples_software_only_medical_device {
53
52
  #refinement dependency svcGrading to swGradingModule;
54
53
 
55
54
  part duContainerImage : SoftwareDeploymentUnit {
56
- @MemoIdentity { :>> providedId = "SMD-DU-001"; } attribute :>> name = "ScreeningServiceImage";
55
+ @MemoIdentity { :>> providedId = "SMD-DU-001"; :>> label = "ScreeningServiceImage"; }
57
56
  attribute :>> unitKind = "OCI container image";
58
57
  attribute :>> integrityProtection = "image signature + SBOM attestation";
59
58
  }
60
59
  part nodeCloud : ProcessingNode {
61
- @MemoIdentity { :>> providedId = "SMD-HW-001"; } attribute :>> name = "CloudComputeNode";
60
+ @MemoIdentity { :>> providedId = "SMD-HW-001"; :>> label = "CloudComputeNode"; }
62
61
  attribute :>> nodeKind = ProcessingNodeKind::cloudServer;
63
62
  attribute :>> supportsContainerization = true;
64
63
  attribute :>> realTimeCapable = false;