@memoarchitect/ontology 0.12.1 → 0.15.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 (317) 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 -358
  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 -91
  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 +675 -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 +7 -29
  123. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml +12 -36
  124. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +13 -25
  125. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/diagram_samples.sysml +388 -0
  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 +27 -36
  128. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml +8 -21
  129. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +17 -65
  130. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +23 -32
  131. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml +9 -22
  132. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +7 -22
  133. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml +18 -34
  134. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +2 -9
  135. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +18 -42
  136. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +11 -24
  137. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +9 -36
  138. package/examples/sysml-diagram-samples/model/methodology/project.sysml +40 -0
  139. package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +1 -1
  140. package/examples/temperature-alarm/memo.identity.yaml +6 -0
  141. package/examples/temperature-alarm/memo.package.yaml +3 -1
  142. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +43 -21
  143. package/examples/temperature-alarm/model/{catalog → methodology}/project.sysml +4 -5
  144. package/examples/ui-screen-regions/memo.identity.yaml +33 -0
  145. package/examples/ui-screen-regions/memo.package.yaml +3 -1
  146. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +12 -12
  147. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +18 -18
  148. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +6 -6
  149. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +3 -3
  150. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +1 -1
  151. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +1 -1
  152. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +10 -10
  153. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +1 -1
  154. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +12 -12
  155. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +15 -15
  156. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +6 -6
  157. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +1 -2
  158. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +1 -2
  159. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +1 -2
  160. package/examples/ui-screen-regions/model/{catalog → methodology}/project.sysml +4 -5
  161. package/extensions/README.md +65 -16
  162. package/extensions/aadl/memo.package.yaml +1 -1
  163. package/extensions/aadl/src/aadl_extension.sysml +5 -2
  164. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +29 -50
  165. package/extensions/clinical/memo.package.yaml +1 -1
  166. package/extensions/clinical/src/clinical_extension.sysml +2 -0
  167. package/extensions/cloud/memo.package.yaml +1 -1
  168. package/extensions/container/memo.package.yaml +1 -1
  169. package/extensions/messaging/memo.package.yaml +1 -1
  170. package/extensions/messaging/src/messaging_extension.sysml +2 -2
  171. package/extensions/ros/memo.package.yaml +1 -1
  172. package/extensions/ros/src/ros_extension.sysml +25 -24
  173. package/extensions/template/memo.package.yaml +1 -1
  174. package/extensions/template/model/extension.sysml +25 -0
  175. package/memo.manifest.yaml +1 -7
  176. package/methodologies/default/memo.package.yaml +1 -1
  177. package/methodologies/gpca/memo.package.yaml +1 -1
  178. package/ontology/memo.package.yaml +1 -1
  179. package/package.json +6 -4
  180. package/profile/memo.package.yaml +1 -1
  181. package/src/architecture/decisions/memo_decisions.sysml +9 -2
  182. package/src/architecture/functional/behavior/memo_behavior.sysml +27 -7
  183. package/src/architecture/functional/functions/memo_functions.sysml +45 -31
  184. package/src/architecture/functional/memo_architecture_functional.sysml +14 -0
  185. package/src/architecture/implementation/memo_architecture_implementation.sysml +21 -0
  186. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +7 -0
  187. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +58 -17
  188. package/src/architecture/implementation/ui/memo_ui.sysml +1 -1
  189. package/src/architecture/logical/interfaces/memo_interfaces.sysml +67 -58
  190. package/src/architecture/logical/memo_architecture_logical.sysml +13 -0
  191. package/src/architecture/logical/structure/memo_logical_structure.sysml +27 -8
  192. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +4 -1
  193. package/src/architecture/operational/memo_architecture_operational.sysml +19 -0
  194. package/src/architecture/operational/scenarios/memo_scenarios.sysml +9 -8
  195. package/src/architecture/operational/structure/memo_operational.sysml +5 -2
  196. package/src/architecture/operational/use_cases/memo_use_cases.sysml +16 -8
  197. package/src/architecture/realization/deployment/memo_deployment.sysml +30 -10
  198. package/src/architecture/realization/memo_architecture_realization.sysml +13 -0
  199. package/src/architecture/realization/physical/memo_physical_architecture.sysml +61 -0
  200. package/src/architecture/variability/memo_variability.sysml +87 -0
  201. package/src/artifacts/configuration_management/memo_configuration_management.sysml +95 -3
  202. package/src/artifacts/core/memo_controlled_artifacts.sysml +4 -2
  203. package/src/artifacts/standards/cfr_21_820.sysml +12 -24
  204. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +13 -20
  205. package/src/artifacts/standards/iec_60601_1.sysml +16 -32
  206. package/src/artifacts/standards/iec_60601_1_2.sysml +5 -10
  207. package/src/artifacts/standards/iec_60812.sysml +4 -8
  208. package/src/artifacts/standards/iec_62304.sysml +607 -47
  209. package/src/artifacts/standards/iec_62366_1.sysml +12 -24
  210. package/src/artifacts/standards/iec_81001_5_1.sysml +8 -16
  211. package/src/artifacts/standards/iso_13485.sysml +12 -24
  212. package/src/artifacts/standards/iso_14971.sysml +118 -20
  213. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +3 -6
  214. package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +14 -4
  215. package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +1 -2
  216. package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +1 -2
  217. package/src/artifacts/templates/dhf/iec-62304/sad.md +1 -2
  218. package/src/artifacts/templates/dhf/iec-62304/sbom.md +1 -2
  219. package/src/artifacts/templates/dhf/iec-62304/sdp.md +1 -2
  220. package/src/artifacts/templates/dhf/iec-62304/soup.md +3 -5
  221. package/src/artifacts/templates/dhf/system/sad.md +1 -1
  222. package/src/artifacts/templates/dhf/system/standards-checklist.md +2 -2
  223. package/src/artifacts/templates/dhf/system/standards-traceability.md +1 -1
  224. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +339 -13
  225. package/src/assurance/human_factors/memo_human_factors.sysml +6 -2
  226. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +7 -3
  227. package/src/assurance/safety_risk/memo_risk.sysml +39 -1
  228. package/src/core/common/memo_common.sysml +51 -68
  229. package/src/core/enumerations/memo_enumerations.sysml +93 -9
  230. package/src/core/relationships/memo_relationships.sysml +17 -11
  231. package/src/core/relationships/memo_workspace_membership.sysml +284 -0
  232. package/src/core/semantics/semantics.sysml +58 -0
  233. package/src/core/terminology/terminology.sysml +7 -0
  234. package/src/memo_namespaces.sysml +6 -0
  235. package/src/methodology/archetypes/memo_archetypes.sysml +8 -16
  236. package/src/methodology/core/memo_core.sysml +85 -29
  237. package/src/methodology/profiles/memo_profiles.sysml +217 -61
  238. package/src/methodology/workflow/memo_workflow.sysml +28 -0
  239. package/src/rules/closure/closure_rules.sysml +250 -4
  240. package/src/rules/crosslayer/cross_layer_rules.sysml +11 -0
  241. package/src/rules/ontology/ontology_invariants.sysml +288 -48
  242. package/src/rules/quantitative/quantitative_rules.sysml +4 -0
  243. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +28 -28
  244. package/src/viewpoints/clinical/clinical_viewpoint.sysml +4 -5
  245. package/src/viewpoints/context/context_viewpoint.sysml +4 -5
  246. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +3 -5
  247. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -5
  248. package/src/viewpoints/definitions/memo_view_layout.sysml +150 -0
  249. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +3 -5
  250. package/src/viewpoints/functional/functional_viewpoint.sysml +4 -5
  251. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +2 -4
  252. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +2 -4
  253. package/src/viewpoints/logical/logical_viewpoint.sysml +4 -5
  254. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +2 -4
  255. package/src/viewpoints/operational/operational_viewpoint.sysml +4 -5
  256. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +3 -5
  257. package/src/viewpoints/physical/physical_viewpoint.sysml +4 -5
  258. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +2 -4
  259. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +2 -4
  260. package/src/viewpoints/rendering/memo_rendering.sysml +50 -98
  261. package/src/viewpoints/requirements/requirements_viewpoint.sysml +4 -5
  262. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +2 -4
  263. package/src/viewpoints/risk/risk_viewpoint.sysml +4 -5
  264. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +2 -4
  265. package/src/viewpoints/software/software_viewpoint.sysml +4 -5
  266. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +3 -5
  267. package/src/viewpoints/{definitions → stakeholders_concerns}/memo_stakeholders_concerns.sysml +45 -36
  268. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +4 -5
  269. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +1 -1
  270. package/src/viewpoints/usability/usability_viewpoint.sysml +4 -5
  271. package/src/viewpoints/verification/verification_viewpoint.sysml +4 -5
  272. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +2 -4
  273. package/stage1/syside-67f92dc96ba75cd05b5c8d13.ids.gz +0 -0
  274. package/stage1/syside-67f92dc96ba75cd05b5c8d13.json.gz +0 -0
  275. package/templates/default/memo.package.yaml +6 -1
  276. package/templates/default/model/catalog/architecture/system.sysml +7 -3
  277. package/templates/default/model/{catalog → methodology}/project.sysml +3 -4
  278. package/examples/sysml-diagram-samples/model/catalog/project.sysml +0 -26
  279. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +0 -47
  280. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +0 -94
  281. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +0 -13
  282. package/examples/ui-screen-regions/model/catalog/relationships.sysml +0 -8
  283. package/extensions/aadl/src/methodology/aadl_methodology.sysml +0 -19
  284. package/extensions/clinical/src/methodology/clinical_methodology.sysml +0 -24
  285. package/extensions/cloud/src/methodology/cloud_methodology.sysml +0 -19
  286. package/extensions/container/src/methodology/container_methodology.sysml +0 -19
  287. package/extensions/messaging/src/methodology/messaging_methodology.sysml +0 -19
  288. package/extensions/ros/src/methodology/ros_methodology.sysml +0 -27
  289. package/extensions/template/src/extension.sysml +0 -39
  290. package/templates/connected-device/memo.package.yaml +0 -13
  291. package/templates/connected-device/model/catalog/architecture/system.sysml +0 -5
  292. package/templates/connected-device/model/catalog/artifacts/catalog.sysml +0 -5
  293. package/templates/connected-device/model/catalog/assurance/requirements.sysml +0 -7
  294. package/templates/connected-device/model/catalog/project.sysml +0 -30
  295. package/templates/connected-device/package.json +0 -8
  296. package/templates/connected-device/syside.toml +0 -13
  297. package/templates/infusion-pump/memo.package.yaml +0 -13
  298. package/templates/infusion-pump/model/catalog/architecture/system.sysml +0 -5
  299. package/templates/infusion-pump/model/catalog/artifacts/catalog.sysml +0 -5
  300. package/templates/infusion-pump/model/catalog/assurance/requirements.sysml +0 -7
  301. package/templates/infusion-pump/model/catalog/project.sysml +0 -30
  302. package/templates/infusion-pump/package.json +0 -8
  303. package/templates/infusion-pump/syside.toml +0 -13
  304. package/templates/monitoring-device/memo.package.yaml +0 -13
  305. package/templates/monitoring-device/model/catalog/architecture/system.sysml +0 -5
  306. package/templates/monitoring-device/model/catalog/artifacts/catalog.sysml +0 -5
  307. package/templates/monitoring-device/model/catalog/assurance/requirements.sysml +0 -7
  308. package/templates/monitoring-device/model/catalog/project.sysml +0 -30
  309. package/templates/monitoring-device/package.json +0 -8
  310. package/templates/monitoring-device/syside.toml +0 -13
  311. package/templates/samd/memo.package.yaml +0 -13
  312. package/templates/samd/model/catalog/architecture/system.sysml +0 -5
  313. package/templates/samd/model/catalog/artifacts/catalog.sysml +0 -5
  314. package/templates/samd/model/catalog/assurance/requirements.sysml +0 -7
  315. package/templates/samd/model/catalog/project.sysml +0 -30
  316. package/templates/samd/package.json +0 -8
  317. package/templates/samd/syside.toml +0 -13
@@ -1,31 +1,80 @@
1
1
  # Extensions
2
2
 
3
3
  An extension is a **way to model**, not a sample. It is a reusable ontology
4
- package that specializes the base and is selected by a methodology or a project
5
- binding — so extensions live here, beside `src/`, and not under `examples/`.
4
+ package that specializes the base and is brought into a project by importing
5
+ it — so extensions live here, beside `src/`, and not under `examples/`.
6
6
  Examples *use* extensions; `examples/ros-mobile-robot` demonstrates one.
7
7
 
8
- MEMO defines no extension metaclass. An extension is a plain SysML package:
8
+ MEMO defines no extension metaclass and no extension methodology. An extension
9
+ is plain SysML packages:
9
10
 
10
11
  - outside `src/` and outside the `memo::` namespace;
11
12
  - with a `memo.package.yaml` carrying identity and `sysmlDir` only (the semantic
12
13
  fields `type` / `extends` / `usage` / `ontologies` / `methodology` / `modules`
13
14
  are rejected);
14
15
  - whose SysML **specializes** base types;
15
- - plus a `MethodologyDefinition` naming `baseMethodology`, `scopeMode`, and its
16
- own `includedModule`.
16
+ - with one **facade** package, `memo_extension_<directory>`, that publicly
17
+ imports every other package the extension ships and every extension it builds
18
+ on.
17
19
 
18
- `template/` is the skeleton. The build round-trips every extension into its own
19
- KPAR and resolves it with `syside check`, exactly as it does the base.
20
-
21
- ## Composition happens at the project binding
20
+ The facade **is** the extension as the model sees it: a project imports it,
21
+ another extension imports it, and nothing else identifies an extension.
22
22
 
23
- `MethodologyDefinition.baseMethodology` is `[0..1]` — single inheritance, and
24
- deliberate. Extensions therefore **do not chain**. Both
25
- `MethodologyDefinition.includedModule` and `ProjectMethodBinding.includedModule`
26
- are `String[0..*]`, so a project combines any number of independent extensions
27
- by listing their modules in its own binding. That is *the* composition
28
- mechanism; nothing else is supported.
23
+ `template/` is the skeleton. The build round-trips every extension into its own
24
+ KPAR (`memo-extension-<directory>`) and resolves the whole tree with `syside check`,
25
+ exactly as it does the base.
26
+
27
+ ## Each extension is its own package
28
+
29
+ An extension is built, versioned and depended on by itself. Its KPAR declares
30
+ what it uses: the base ontology and default methodology, the SysML libraries,
31
+ and **every other extension its source imports** (`import memo_extension_<name>`
32
+ is read from the files, not listed twice). `ros` therefore declares
33
+ `memo-extension-messaging` and `memo-extension-container`; `clinical` declares
34
+ neither. Add an `import` of another extension and the next build records the
35
+ dependency; remove it and the dependency goes.
36
+
37
+ ## One import brings an extension in
38
+
39
+ ```sysml
40
+ package memo_examples_ros_mobile_robot_project {
41
+ public import memo_extension_ros::*;
42
+
43
+ part projectBinding : ModelMethodBinding {
44
+ ref :>> selectedMethodology = mdDefaultDefinition;
45
+ }
46
+ }
47
+ ```
48
+
49
+ A methodology selects the packages that the package declaring it **publicly
50
+ imports**, followed through their public imports in turn; a project adds to that
51
+ selection the same way, from the package that declares its binding. That is
52
+ SysML's own meaning of a public import — it passes the imported members on to
53
+ whoever imports the importing package — so there is no list of package names
54
+ beside it, and a misspelled package is an import the compiler rejects. A
55
+ private import makes the names visible to the importing package and selects
56
+ nothing: the ROS package privately imports the architecture packages it
57
+ specializes, and selecting ROS does not select them.
58
+
59
+ So an extension's facade publicly imports what selecting the extension has to
60
+ select:
61
+
62
+ - **its own packages.** `aadl`'s facade publicly imports
63
+ `memo_extension_aadl_runtime` and `memo_extension_aadl_correspondence`, the
64
+ packages that declare its definitions and rules. A facade that left one out
65
+ would leave it out of every project that imports the extension.
66
+ - **the extensions it builds on.** `ros` publicly imports `memo_extension_messaging`
67
+ and `memo_extension_container`. The dependency is declared once, by that
68
+ import, and it is the same line the KPAR build reads to record the dependency,
69
+ so the two cannot disagree.
70
+
71
+ A test holds each facade's public imports equal to the packages the directory
72
+ declares plus the extensions it imports, and checks that every example using an
73
+ extension's definitions publicly imports its facade from the entrypoint, or one
74
+ whose facade imports it.
75
+
76
+ A project's or a supplier's own packages outside MEMO are added the same way: a
77
+ public import in the binding's package.
29
78
 
30
79
  ## Rule 1 — use native mechanisms first; extension relations specialize base ones
31
80
 
@@ -71,7 +120,7 @@ the prefix is what makes that check something an author can satisfy by
71
120
  construction rather than by luck.
72
121
 
73
122
  Enumeration literals are not definitions and are not prefixed —
74
- `RosReliabilityKind::reliable`, not `RosReliabilityKind::rosReliable`.
123
+ `RosDurabilityKind::transientLocal`, not `RosDurabilityKind::rosTransientLocal`.
75
124
 
76
125
  ## What an extension must not do
77
126
 
@@ -7,7 +7,7 @@
7
7
  # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
8
  # removed at the native semantic flip and are now rejected if present.
9
9
  name: '@memoarchitect/extension-aadl'
10
- version: 0.12.1
10
+ version: 0.15.0
11
11
  description: AADL (SAE AS5506) correspondence profile and runtime component families
12
12
  license: MIT
13
13
  tags:
@@ -1,5 +1,8 @@
1
- // The AADL extension's public facade. A project includes the module
2
- // `memo_extension_aadl` in its binding and imports this package.
1
+ // The AADL extension's public facade. It publicly imports every package the
2
+ // extension ships, so one import brings the extension into a project: a
3
+ // project that imports it sees the definitions, and one that imports it
4
+ // publicly from its entrypoint package (or a methodology that does) selects
5
+ // every package below.
3
6
  package memo_extension_aadl {
4
7
  public import memo_extension_aadl_runtime::*;
5
8
  public import memo_extension_aadl_correspondence::*;
@@ -23,127 +23,106 @@ package memo_extension_aadl_correspondence {
23
23
  private import memo_core_common::MemoIdentity;
24
24
  // ── Component categories ────────────────────────────────────────────
25
25
  part aadlCorrProcess : CorrespondenceRule {
26
- @MemoIdentity { :>> providedId = "EXT-AADL-C-001"; }
27
- attribute :>> name = "ProcessCorrespondence";
26
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-001"; :>> label = "ProcessCorrespondence"; }
28
27
  attribute :>> ruleExpression = "memo_extension_aadl_runtime::AadlProcess <-> AADL component category `process`";
29
- attribute :>> description = "A MEMO SoftwareComponent with runtimeKind = process, carrying addressSpaceIsolated.";
28
+ doc /* A MEMO SoftwareComponent with runtimeKind = process, carrying addressSpaceIsolated. */
30
29
  }
31
30
  part aadlCorrThread : CorrespondenceRule {
32
- @MemoIdentity { :>> providedId = "EXT-AADL-C-002"; }
33
- attribute :>> name = "ThreadCorrespondence";
31
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-002"; :>> label = "ThreadCorrespondence"; }
34
32
  attribute :>> ruleExpression = "memo_extension_aadl_runtime::AadlThread <-> AADL component category `thread`";
35
- attribute :>> description = "Schedulable unit inside one process; owningProcessName names the containing process.";
33
+ doc /* Schedulable unit inside one process; owningProcessName names the containing process. */
36
34
  }
37
35
  part aadlCorrVirtualProcessor : CorrespondenceRule {
38
- @MemoIdentity { :>> providedId = "EXT-AADL-C-003"; }
39
- attribute :>> name = "VirtualProcessorCorrespondence";
36
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-003"; :>> label = "VirtualProcessorCorrespondence"; }
40
37
  attribute :>> ruleExpression = "memo_extension_aadl_runtime::AadlVirtualProcessor <-> AADL component category `virtual processor`";
41
- attribute :>> description = "An ARINC 653 partition. partitionBudget is the guaranteed time and memory; isolationMechanism is what enforces it.";
38
+ doc /* An ARINC 653 partition. partitionBudget is the guaranteed time and memory; isolationMechanism is what enforces it. */
42
39
  }
43
40
  part aadlCorrProcessor : CorrespondenceRule {
44
- @MemoIdentity { :>> providedId = "EXT-AADL-C-004"; }
45
- attribute :>> name = "ProcessorCorrespondence";
41
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-004"; :>> label = "ProcessorCorrespondence"; }
46
42
  attribute :>> ruleExpression = "memo_architecture_realization_physical::ProcessingNode <-> AADL component category `processor`";
47
43
  }
48
44
  part aadlCorrMemory : CorrespondenceRule {
49
- @MemoIdentity { :>> providedId = "EXT-AADL-C-005"; }
50
- attribute :>> name = "MemoryCorrespondence";
45
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-005"; :>> label = "MemoryCorrespondence"; }
51
46
  attribute :>> ruleExpression = "memo_architecture_realization_physical::MemoryDevice <-> AADL component category `memory`";
52
47
  }
53
48
  part aadlCorrBus : CorrespondenceRule {
54
- @MemoIdentity { :>> providedId = "EXT-AADL-C-006"; }
55
- attribute :>> name = "BusCorrespondence";
49
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-006"; :>> label = "BusCorrespondence"; }
56
50
  attribute :>> ruleExpression = "memo_architecture_implementation_hardware_electrical::NetworkMedium <-> AADL component category `bus`";
57
51
  }
58
52
  part aadlCorrSystem : CorrespondenceRule {
59
- @MemoIdentity { :>> providedId = "EXT-AADL-C-007"; }
60
- attribute :>> name = "SystemCorrespondence";
53
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-007"; :>> label = "SystemCorrespondence"; }
61
54
  attribute :>> ruleExpression = "memo_architecture_logical_structure::System <-> AADL component category `system`";
62
- attribute :>> description = "AADL's system is the composition unit, which is MEMO's logical System rather than any runtime element.";
55
+ doc /* AADL's system is the composition unit, which is MEMO's logical System rather than any runtime element. */
63
56
  }
64
57
 
65
58
  // ── Bindings. AADL's analytic power is that everything is bound to
66
59
  // something, and the binding is where latency, bandwidth, and fault
67
60
  // propagation accrue. MEMO has all three (plan C1). ────────────────────
68
61
  part aadlCorrProcessorBinding : CorrespondenceRule {
69
- @MemoIdentity { :>> providedId = "EXT-AADL-C-010"; }
70
- attribute :>> name = "ActualProcessorBindingCorrespondence";
62
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-010"; :>> label = "ActualProcessorBindingCorrespondence"; }
71
63
  attribute :>> ruleExpression = "memo_architecture_realization_deployment::DeploysTo <-> AADL property `Actual_Processor_Binding`";
72
64
  }
73
65
  part aadlCorrMemoryBinding : CorrespondenceRule {
74
- @MemoIdentity { :>> providedId = "EXT-AADL-C-011"; }
75
- attribute :>> name = "ActualMemoryBindingCorrespondence";
66
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-011"; :>> label = "ActualMemoryBindingCorrespondence"; }
76
67
  attribute :>> ruleExpression = "memo_architecture_realization_deployment::MemoryBinding <-> AADL property `Actual_Memory_Binding`";
77
68
  }
78
69
  part aadlCorrConnectionBinding : CorrespondenceRule {
79
- @MemoIdentity { :>> providedId = "EXT-AADL-C-012"; }
80
- attribute :>> name = "ActualConnectionBindingCorrespondence";
70
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-012"; :>> label = "ActualConnectionBindingCorrespondence"; }
81
71
  attribute :>> ruleExpression = "memo_architecture_realization_deployment::ConnectionBinding <-> AADL property `Actual_Connection_Binding`";
82
- attribute :>> description = "The bound element is the ComponentExchange, because the exchange is what owns the budget the medium spends.";
72
+ doc /* The bound element is the ComponentExchange, because the exchange is what owns the budget the medium spends. */
83
73
  }
84
74
 
85
75
  // ── Ports and flows ─────────────────────────────────────────────────
86
76
  part aadlCorrPortCategory : CorrespondenceRule {
87
- @MemoIdentity { :>> providedId = "EXT-AADL-C-020"; }
88
- attribute :>> name = "PortCategoryCorrespondence";
77
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-020"; :>> label = "PortCategoryCorrespondence"; }
89
78
  attribute :>> ruleExpression = "memo_core_enumerations::PortCategoryKind (data | 'event' | eventData) <-> AADL `data port` | `event port` | `event data port`";
90
- attribute :>> description = "Determines whether a missed deadline loses a sample or grows a queue — two failure modes with two mitigations.";
79
+ doc /* Determines whether a missed deadline loses a sample or grows a queue — two failure modes with two mitigations. */
91
80
  }
92
81
  part aadlCorrFlowSpec : CorrespondenceRule {
93
- @MemoIdentity { :>> providedId = "EXT-AADL-C-021"; }
94
- attribute :>> name = "FlowSpecificationCorrespondence";
82
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-021"; :>> label = "FlowSpecificationCorrespondence"; }
95
83
  attribute :>> ruleExpression = "memo_architecture_realization_deployment::FlowSpecification (FlowSpecKind source | sink | path) <-> AADL `flow source` | `flow sink` | `flow path`";
96
84
  }
97
85
  part aadlCorrEndToEndFlow : CorrespondenceRule {
98
- @MemoIdentity { :>> providedId = "EXT-AADL-C-022"; }
99
- attribute :>> name = "EndToEndFlowCorrespondence";
86
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-022"; :>> label = "EndToEndFlowCorrespondence"; }
100
87
  attribute :>> ruleExpression = "memo_architecture_realization_deployment::EndToEndFlow <-> AADL `end to end flow`";
101
88
  }
102
89
 
103
90
  // ── Properties. AADL's property sets are the technology-specific half of
104
91
  // the language; these are the ones MEMO already carries by another name.
105
92
  part aadlCorrPeriod : CorrespondenceRule {
106
- @MemoIdentity { :>> providedId = "EXT-AADL-C-030"; }
107
- attribute :>> name = "PeriodCorrespondence";
93
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-030"; :>> label = "PeriodCorrespondence"; }
108
94
  attribute :>> ruleExpression = "SoftwareComponent.periodMs <-> AADL `Timing_Properties::Period` (ms)";
109
95
  }
110
96
  part aadlCorrDeadline : CorrespondenceRule {
111
- @MemoIdentity { :>> providedId = "EXT-AADL-C-031"; }
112
- attribute :>> name = "DeadlineCorrespondence";
97
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-031"; :>> label = "DeadlineCorrespondence"; }
113
98
  attribute :>> ruleExpression = "SoftwareComponent.deadlineMs <-> AADL `Timing_Properties::Deadline` (ms)";
114
99
  }
115
100
  part aadlCorrComputeExecutionTime : CorrespondenceRule {
116
- @MemoIdentity { :>> providedId = "EXT-AADL-C-032"; }
117
- attribute :>> name = "ComputeExecutionTimeCorrespondence";
101
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-032"; :>> label = "ComputeExecutionTimeCorrespondence"; }
118
102
  attribute :>> ruleExpression = "SoftwareComponent.wcetMs <-> upper bound of AADL `Timing_Properties::Compute_Execution_Time` (ms)";
119
- attribute :>> description = "AADL records a range; MEMO records the worst case, which is the bound a schedulability argument uses.";
103
+ doc /* AADL records a range; MEMO records the worst case, which is the bound a schedulability argument uses. */
120
104
  }
121
105
  part aadlCorrPriority : CorrespondenceRule {
122
- @MemoIdentity { :>> providedId = "EXT-AADL-C-033"; }
123
- attribute :>> name = "PriorityCorrespondence";
106
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-033"; :>> label = "PriorityCorrespondence"; }
124
107
  attribute :>> ruleExpression = "SoftwareComponent.priority <-> AADL `Thread_Properties::Priority`";
125
108
  }
126
109
  part aadlCorrSchedulingProtocol : CorrespondenceRule {
127
- @MemoIdentity { :>> providedId = "EXT-AADL-C-034"; }
128
- attribute :>> name = "SchedulingProtocolCorrespondence";
110
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-034"; :>> label = "SchedulingProtocolCorrespondence"; }
129
111
  attribute :>> ruleExpression = "SoftwareComponent.schedulingPolicy <-> AADL `Deployment_Properties::Scheduling_Protocol`";
130
112
  }
131
113
  part aadlCorrLatency : CorrespondenceRule {
132
- @MemoIdentity { :>> providedId = "EXT-AADL-C-035"; }
133
- attribute :>> name = "LatencyCorrespondence";
114
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-035"; :>> label = "LatencyCorrespondence"; }
134
115
  attribute :>> ruleExpression = "EndToEndFlow.latencyBudgetMs <-> AADL `Communication_Properties::Latency` upper bound (ms)";
135
116
  }
136
117
  part aadlCorrBandwidth : CorrespondenceRule {
137
- @MemoIdentity { :>> providedId = "EXT-AADL-C-036"; }
138
- attribute :>> name = "BandwidthCorrespondence";
118
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-036"; :>> label = "BandwidthCorrespondence"; }
139
119
  attribute :>> ruleExpression = "ConnectionBinding.allocatedBandwidth <-> AADL `Communication_Properties::Bandwidth_Budget`";
140
120
  }
141
121
 
142
122
  // ── Where the correspondence stops ──────────────────────────────────
143
123
  part aadlCorrNoCounterpart : CorrespondenceRule {
144
- @MemoIdentity { :>> providedId = "EXT-AADL-C-090"; }
145
- attribute :>> name = "NoCounterpartNote";
124
+ @MemoIdentity { :>> providedId = "EXT-AADL-C-090"; :>> label = "NoCounterpartNote"; }
146
125
  attribute :>> ruleExpression = "no correspondence: AADL `subprogram`, `device`, `abstract`; MEMO's five assurance disciplines";
147
- attribute :>> description = "Recorded so the gap is a stated boundary of the profile rather than an omission a reader has to discover.";
126
+ doc /* Recorded so the gap is a stated boundary of the profile rather than an omission a reader has to discover. */
148
127
  }
149
128
  }
@@ -7,7 +7,7 @@
7
7
  # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
8
  # removed at the native semantic flip and are now rejected if present.
9
9
  name: '@memoarchitect/example-extension-clinical'
10
- version: 0.6.1
10
+ version: 0.15.0
11
11
  description: Example methodology extension for clinical-procedure vocabulary
12
12
  license: MIT
13
13
  tags:
@@ -1,3 +1,5 @@
1
+ // The clinical extension's public facade: it publicly imports every package
2
+ // the extension ships, so importing it brings in the whole extension.
1
3
  package memo_extension_clinical {
2
4
  public import memo_extension_clinical_procedures::*;
3
5
  }
@@ -7,7 +7,7 @@
7
7
  # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
8
  # removed at the native semantic flip and are now rejected if present.
9
9
  name: '@memoarchitect/extension-cloud'
10
- version: 0.12.1
10
+ version: 0.15.0
11
11
  description: Networked services and managed data stores
12
12
  license: MIT
13
13
  tags:
@@ -7,7 +7,7 @@
7
7
  # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
8
  # removed at the native semantic flip and are now rejected if present.
9
9
  name: '@memoarchitect/extension-container'
10
- version: 0.12.1
10
+ version: 0.15.0
11
11
  description: OCI container images and container runtimes as deployment content
12
12
  license: MIT
13
13
  tags:
@@ -7,7 +7,7 @@
7
7
  # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
8
  # removed at the native semantic flip and are now rejected if present.
9
9
  name: '@memoarchitect/extension-messaging'
10
- version: 0.12.1
10
+ version: 0.15.0
11
11
  description: Publish/subscribe messaging — topics, brokers, and delivery semantics
12
12
  license: MIT
13
13
  tags:
@@ -28,7 +28,7 @@ package memo_extension_messaging {
28
28
  // Message/payload definition. A named topic is an item usage of a concrete
29
29
  // message definition; the definition states the schema, while the usage
30
30
  // supplies the deployed topic identity.
31
- item def MessagingMessage specializes SoftwareItem {
31
+ item def MessagingMessage specializes DataItem {
32
32
  attribute messageSchema : String;
33
33
  }
34
34
 
@@ -52,7 +52,7 @@ package memo_extension_messaging {
52
52
  interface def MessagingTopicInterface specializes SoftwareInterface {
53
53
  end publisher : MessagingPublisher :>> source;
54
54
  end subscriber : MessagingSubscriber :>> target;
55
- flow of MessagingMessage from publisher.payload to subscriber.payload;
55
+ flow messagingMessageFlow of MessagingMessage from publisher.payload to subscriber.payload;
56
56
  }
57
57
 
58
58
  part def MessagingBroker specializes SoftwareComponent {
@@ -7,7 +7,7 @@
7
7
  # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
8
  # removed at the native semantic flip and are now rejected if present.
9
9
  name: '@memoarchitect/extension-ros'
10
- version: 0.12.1
10
+ version: 0.15.0
11
11
  description: ROS 2 nodes, messages, topic/service/action interfaces, QoS, and containerized deployment
12
12
  license: MIT
13
13
  tags:
@@ -7,21 +7,24 @@
7
7
  // relation. `BuildsInto`, `DeploysTo`, and `ProvidesEnvironment` are reused
8
8
  // exactly as the base declares them.
9
9
  //
10
- // Composition is by MODULE LIST, not by chaining. `baseMethodology` is [0..1],
11
- // but `includedModule` is [0..*], so this extension's methodology names
12
- // `memo_extension_messaging` and `memo_extension_container` alongside its own
13
- // module. ROS communication specializes native MEMO item, port, and interface
14
- // families; it does not invent publish/subscribe relations.
10
+ // Composition is by import. ROS builds on the messaging and container
11
+ // extensions and imports them PUBLICLY, so a project that imports
12
+ // `memo_extension_ros` has all three: their definitions are visible and their
13
+ // packages are selected. The dependency is stated once, here, and the KPAR
14
+ // build reads the same lines to record it. ROS communication specializes
15
+ // native MEMO item, port, and interface families; it does not invent
16
+ // publish/subscribe relations.
15
17
  package memo_extension_ros {
16
18
  private import ScalarValues::*;
17
19
 
18
20
  private import memo_core_common::*;
21
+ private import memo_core_enumerations::*;
19
22
  private import memo_architecture_functional_behavior::*;
20
23
  private import memo_architecture_logical_interfaces::*;
21
24
  private import memo_architecture_implementation_software_structure::*;
22
25
  private import memo_architecture_implementation_software_runtime::*;
23
- private import memo_extension_messaging::*;
24
- private import memo_extension_container::*;
26
+ public import memo_extension_messaging::*;
27
+ public import memo_extension_container::*;
25
28
 
26
29
  // ── Quality of service ──────────────────────────────────────────────
27
30
  //
@@ -33,13 +36,6 @@ package memo_extension_ros {
33
36
  // between a publisher and a subscriber, and read by a tool; a property bag
34
37
  // cannot. `PropertySet` is deleted in this session for that reason.
35
38
 
36
- // ROS 2 RELIABLE resends until delivery; BEST_EFFORT does not. This is
37
- // the delivery guarantee, so it maps onto MessagingDeliveryKind:
38
- // bestEffort is atMostOnce, reliable is atLeastOnce.
39
- enum def RosReliabilityKind {
40
- enum bestEffort;
41
- enum reliable;
42
- }
43
39
  // TRANSIENT_LOCAL replays the last samples to a late-joining subscriber;
44
40
  // VOLATILE does not. The difference decides whether a node that restarts
45
41
  // sees the current state or waits for the next publication — which is a
@@ -49,8 +45,12 @@ package memo_extension_ros {
49
45
  enum transientLocal;
50
46
  }
51
47
 
48
+ // RELIABILITY is not in the profile. ROS 2 RELIABLE resends until delivery
49
+ // and BEST_EFFORT does not, which is the delivery guarantee the port
50
+ // already states as `deliverySemantics`: bestEffort is atMostOnce and
51
+ // reliable is atLeastOnce. Stating it a second time here let one port
52
+ // say both and disagree.
52
53
  attribute def RosQosProfile {
53
- attribute reliability : RosReliabilityKind;
54
54
  attribute durability : RosDurabilityKind;
55
55
  // The QoS contract: a sample is expected at least this often.
56
56
  attribute deadlineMs : Real;
@@ -96,6 +96,8 @@ package memo_extension_ros {
96
96
  interface def RosTopicInterface specializes MessagingTopicInterface {
97
97
  end rosPublisher : RosPublisher :>> publisher;
98
98
  end rosSubscriber : RosSubscriber :>> subscriber;
99
+ // A topic goes publisher to subscriber, always.
100
+ attribute :>> direction default DirectionKind::output;
99
101
  }
100
102
 
101
103
  // ── Services: one correlated request/reply contract ────────────────
@@ -106,7 +108,6 @@ package memo_extension_ros {
106
108
  out item request : RosServiceRequest;
107
109
  in item response : RosServiceResponse;
108
110
  attribute serviceName : String;
109
- attribute timeoutMs : Real;
110
111
  }
111
112
 
112
113
  port def RosServiceServer specializes SoftwarePort {
@@ -118,8 +119,8 @@ package memo_extension_ros {
118
119
  interface def RosServiceInterface specializes SoftwareInterface {
119
120
  end client : RosServiceClient :>> source;
120
121
  end server : RosServiceServer :>> target;
121
- flow of RosServiceRequest from client.request to server.request;
122
- flow of RosServiceResponse from server.response to client.response;
122
+ flow rosServiceRequestFlow of RosServiceRequest from client.request to server.request;
123
+ flow rosServiceResponseFlow of RosServiceResponse from server.response to client.response;
123
124
  }
124
125
 
125
126
  // ── Actions: long-running goal protocol ─────────────────────────────
@@ -156,12 +157,12 @@ package memo_extension_ros {
156
157
  interface def RosActionInterface specializes SoftwareInterface {
157
158
  end client : RosActionClient :>> source;
158
159
  end server : RosActionServer :>> target;
159
- flow of RosActionGoal from client.goal to server.goal;
160
- flow of RosActionAcceptance from server.acceptance to client.acceptance;
161
- flow of RosActionFeedback from server.feedback to client.feedback;
162
- flow of RosActionCancel from client.cancel to server.cancel;
163
- flow of RosActionResult from server.result to client.result;
164
- flow of RosActionStatus from server.actionStatus to client.actionStatus;
160
+ flow rosActionGoalFlow of RosActionGoal from client.goal to server.goal;
161
+ flow rosActionAcceptanceFlow of RosActionAcceptance from server.acceptance to client.acceptance;
162
+ flow rosActionFeedbackFlow of RosActionFeedback from server.feedback to client.feedback;
163
+ flow rosActionCancelFlow of RosActionCancel from client.cancel to server.cancel;
164
+ flow rosActionResultFlow of RosActionResult from server.result to client.result;
165
+ flow rosActionStatusFlow of RosActionStatus from server.actionStatus to client.actionStatus;
165
166
  }
166
167
 
167
168
  abstract state def RosActionExecution specializes MemoState;
@@ -14,4 +14,4 @@ tags:
14
14
  - memo
15
15
  - methodology
16
16
  - extension
17
- sysmlDir: ./src
17
+ sysmlDir: ./model
@@ -0,0 +1,25 @@
1
+ // Skeleton for a new MEMO extension. Copy the directory, rename the packages,
2
+ // and replace the prefix.
3
+ //
4
+ // Two conventions this file follows and every extension must (extensions/README.md):
5
+ //
6
+ // 1. Every definition an extension declares is prefixed with the PascalCase
7
+ // form of the extension's directory name — `template/` gives `Template`.
8
+ // Extension names share one flat namespace with the base and with each
9
+ // other, so the prefix is what keeps two independent extensions from both
10
+ // declaring `Node`.
11
+ // 2. A relation an extension declares specializes a base relation. It never
12
+ // roots independently.
13
+ //
14
+ // 3. This package is the extension's facade: the one package a project
15
+ // imports. It publicly imports every other package the extension ships
16
+ // (`public import memo_extension_template_<sub>::*;`) and every extension
17
+ // it builds on (`public import memo_extension_<other>::*;`). A public
18
+ // import is what passes those packages on, so importing this one selects
19
+ // the whole extension, and the KPAR build reads the same imports to
20
+ // record the dependency. There is no list of package names to keep
21
+ // beside it.
22
+ package memo_extension_template {
23
+ // Definitions go here, each prefixed `Template`; sub-packages and the
24
+ // extensions this one builds on are publicly imported here.
25
+ }
@@ -7,13 +7,7 @@ packages:
7
7
  init:
8
8
  defaultExtends: "@memoarchitect/methodology-default"
9
9
  rootImport: "memo"
10
- defaultTemplate: default
11
- templates:
12
- default: ./templates/default
13
- samd: ./templates/samd
14
- connected-device: ./templates/connected-device
15
- monitoring-device: ./templates/monitoring-device
16
- infusion-pump: ./templates/infusion-pump
10
+ template: ./templates/default
17
11
  examples:
18
12
  gpca: ./examples/gpca-pump
19
13
  standard-sysml-diagrams: ./examples/sysml-diagram-samples
@@ -7,7 +7,7 @@
7
7
  # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
8
  # removed at the native semantic flip and are now rejected if present.
9
9
  name: '@memoarchitect/methodology-default'
10
- version: 0.12.1
10
+ version: 0.15.0
11
11
  description: "MEMO default medical-device methodology \u2014 selects viewpoints/views/DHF documents from @memoarchitect/ontology and adds rules, gates, patterns, profiles, and workflow."
12
12
  license: MIT
13
13
  tags:
@@ -7,7 +7,7 @@
7
7
  # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
8
  # removed at the native semantic flip and are now rejected if present.
9
9
  name: '@memoarchitect/methodology-gpca'
10
- version: 0.12.1
10
+ version: 0.15.0
11
11
  description: "GPCA infusion pump methodology \u2014 subtraction-based tailoring of @memoarchitect/methodology-default for the non-networked prototype variant. Excludes cybersecurity and SOUP."
12
12
  license: MIT
13
13
  tags:
@@ -7,7 +7,7 @@
7
7
  # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
8
  # removed at the native semantic flip and are now rejected if present.
9
9
  name: '@memoarchitect/ontology'
10
- version: 0.12.1
10
+ version: 0.15.0
11
11
  description: "MEMO \u2014 the single canonical medical-device ontology: core semantics, the Arcadia-inspired architecture layers (context, requirements, behavior, structure, interfaces, risk, cybersecurity,\
12
12
  \ assurance, \u2026), compliance, viewpoints, views, and invariant rules. One namespace (memo::), one src/ tree."
13
13
  license: MIT
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memoarchitect/ontology",
3
- "version": "0.12.1",
3
+ "version": "0.15.0",
4
4
  "packageManager": "pnpm@9.15.0",
5
5
  "description": "MEMO — Medical Engineering Modelling Ontology. Pure SysML v2 medical-device ontology with native constraints, portable to any conformant SysML v2 tool (SysIDE, SysON, sysand).",
6
6
  "scripts": {
@@ -9,9 +9,10 @@
9
9
  "lint": "node ../memo-tools/packages/tools/lib/bin/memo.js dhf lint",
10
10
  "test": "node --test test/package.test.mjs",
11
11
  "docs:api": "node scripts/generate-sysml-api.mjs",
12
+ "docs:figures": "node scripts/generate-ontology-figures.mjs",
12
13
  "docs:diagrams": "node scripts/generate-reference-diagrams.mjs",
13
- "docs:serve": "node scripts/generate-reference-diagrams.mjs && node scripts/generate-sysml-api.mjs && node scripts/check-reference-coverage.mjs && python3 -m mkdocs serve",
14
- "docs:build": "node scripts/generate-reference-diagrams.mjs && node scripts/generate-sysml-api.mjs && node scripts/check-reference-coverage.mjs && python3 -m mkdocs build --strict",
14
+ "docs:serve": "node scripts/generate-reference-diagrams.mjs && node scripts/generate-sysml-api.mjs && node scripts/generate-ontology-figures.mjs && node scripts/check-reference-coverage.mjs && python3 -m mkdocs serve",
15
+ "docs:build": "node scripts/generate-reference-diagrams.mjs && node scripts/generate-sysml-api.mjs && node scripts/generate-ontology-figures.mjs && node scripts/check-reference-coverage.mjs && python3 -m mkdocs build --strict",
15
16
  "docs:check-reference": "node scripts/check-reference-coverage.mjs",
16
17
  "version:sync": "node scripts/sync-version.mjs",
17
18
  "version:check": "node scripts/sync-version.mjs --check"
@@ -71,6 +72,7 @@
71
72
  "src/memo_namespaces.sysml",
72
73
  "templates/",
73
74
  "examples/",
74
- "extensions/"
75
+ "extensions/",
76
+ "stage1/"
75
77
  ]
76
78
  }
@@ -7,7 +7,7 @@
7
7
  # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
8
  # removed at the native semantic flip and are now rejected if present.
9
9
  name: '@memoarchitect/medical-modeling-profile'
10
- version: 0.12.1
10
+ version: 0.15.0
11
11
  description: Closure rules and viewpoints for medical device modeling
12
12
  license: MIT
13
13
  tags:
@@ -8,11 +8,18 @@ package memo_architecture_decisions {
8
8
  private import memo_artifacts_core::*;
9
9
  part def DesignDecision specializes MemoPart {
10
10
  attribute decisionKind : String;
11
- attribute alternatives : String;
12
- attribute selectedOption : String;
13
11
  attribute decisionStatus : DesignDecisionStatusKind;
14
12
  }
15
13
 
14
+ // The options a decision weighs and the one it chose are links to variants, not
15
+ // strings: `#Alternative dependency from <decision> to <variant>, <variant>;` and
16
+ // `#Selected dependency from <decision> to <variant>;`. A variant is a SysML
17
+ // `variant` (SysML-textual-bnf.kebnf:254-256) of a variation point, so a trade
18
+ // study points at the thing that is being traded. Both are typed dependencies
19
+ // (memo_core_relationships::MemoTypedDependency).
20
+ metadata def Alternative :> MemoTypedDependency;
21
+ metadata def Selected :> MemoTypedDependency;
22
+
16
23
  connection def DecisionRecordedInADR :> MemoRelationship {
17
24
  end decision : DesignDecision :>> source;
18
25
  end adr : ADRArtifact :>> target;