@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
@@ -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.13.2
10
+ version: 0.15.1
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.13.2
10
+ version: 0.15.1
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.13.2
10
+ version: 0.15.1
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.13.2",
3
+ "version": "0.15.1",
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.13.2
10
+ version: 0.15.1
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;
@@ -40,21 +40,34 @@ package memo_architecture_functional_behavior {
40
40
  // records so the two are not confused.
41
41
  metadata def TransitionRecord {
42
42
  attribute id : String;
43
- attribute name : String;
44
43
  attribute trigger : String;
45
44
  attribute guardSummary : String;
46
45
  attribute effectSummary : String;
47
46
  attribute sourceReference : String;
48
47
  }
49
48
 
50
- // A verifiable behavioural constraint, such as an invariant, transition
51
- // rule, temporal claim, assumption, or guarantee.
52
- part def BehaviorProperty specializes VerifiableElement {
49
+ // A behavioural obligation, such as an invariant, transition rule,
50
+ // temporal claim, assumption, or guarantee. It is a `requirement def`
51
+ // because that is what it is: a claim the design must meet and a
52
+ // verification case can `verify`. It was a `part def` under
53
+ // VerifiableElement, which made a property a structural thing and left
54
+ // native `verify` unable to name it.
55
+ requirement def BehaviorProperty :> MemoRequirementElement {
53
56
  attribute propertyKind : BehaviorPropertyKind;
54
57
  attribute languageKind : PropertyLanguageKind;
55
58
  attribute formalExpression : String;
56
59
  }
57
- part def Contract specializes VerifiableElement { attribute contractScope : String; }
60
+ // An assume/guarantee contract on one component, AGREE's shape one to one:
61
+ // the component is the `subject`, each assumption an `assume` member and
62
+ // each guarantee a `require` member naming a BehaviorProperty. The subject
63
+ // replaces `contractScope : String`, which named the component in prose
64
+ // and could not be navigated.
65
+ //
66
+ // This is not the procurement contract of a deliverable; that is a
67
+ // different definition.
68
+ requirement def Contract :> MemoRequirementElement {
69
+ subject component : MemoPart;
70
+ }
58
71
  // `part def PropertySet specializes VerifiableElement { attribute
59
72
  // propertySetScope : String; }` stood here and is DELETED (plan C3,
60
73
  // open question §14.6). It was AADL's property-set idea imported as a
@@ -70,7 +83,12 @@ package memo_architecture_functional_behavior {
70
83
  // annotate a BASE element rather than declare its own type, the SysML-
71
84
  // native answer is `metadata def` + `Metaobjects::SemanticMetadata`, which
72
85
  // is what every MEMO relation already carries since A4.
73
- part def ActivityAction specializes MemoPart {
86
+ // An `action def`: every field it carries — what it does, what goes in and
87
+ // out, its worst-case execution time — describes behaviour. It was a
88
+ // `part def specializes MemoPart`, the same A0 residue `FunctionalFlow`
89
+ // carried, and a behaviour cannot specialize a structure, so nothing could
90
+ // have performed one.
91
+ action def ActivityAction specializes FunctionalAction {
74
92
  attribute actionKind : ActionKind;
75
93
  attribute inputSummary : String;
76
94
  attribute outputSummary : String;
@@ -84,7 +102,9 @@ package memo_architecture_functional_behavior {
84
102
  }
85
103
  // UI scenarios are OperativeScenario usages with scenarioKind `ui`.
86
104
 
87
- part def TimingConstraint specializes VerifiableElement {
105
+ // A timing budget is an obligation on what it measures, so it is a
106
+ // requirement like BehaviorProperty.
107
+ requirement def TimingConstraint :> MemoRequirementElement {
88
108
  attribute constraintKind : TimingConstraintKind;
89
109
  attribute minMs : String;
90
110
  attribute maxMs : String;
@@ -27,6 +27,23 @@
27
27
  // project argues in — therapy, alarm, platform, protection. A function can be
28
28
  // `sense` in the `protection` category, and a safety case reasons about both.
29
29
  //
30
+ // ─── A functional exchange is a flow ─────────────────────────────────────
31
+ //
32
+ // `FunctionalExchange` is an `abstract flow def`, and an exchange is a typed
33
+ // named `flow` between function parameters: the edge IS the exchange. It was
34
+ // a `part def` beside a separate `flow`, with its ends stored as
35
+ // `sourceFunction`/`targetFunction` refs, because a flow could not be the
36
+ // target of an allocation or a trace. A named flow now carries a qualified id
37
+ // that `allocate`, `satisfy` and the rest resolve, so the part reached no
38
+ // rule, query or diagram and existed only to be kept in step with its edge.
39
+ //
40
+ // It is `abstract` because a flow definition specializes the association
41
+ // `Flows::MessageAction`, and a concrete association must declare its two
42
+ // ends (`association-related-types`); here the ends are the usage's
43
+ // parameters. A usage says what it carries through the item type of those
44
+ // parameters, not with `of`: `of` and `: FunctionalExchange` together declare
45
+ // a second `payload`, and a SysML v2 compiler rejects the pair.
46
+ //
30
47
  // ─── System function vs. component function ──────────────────────────────
31
48
  //
32
49
  // ARCADIA's functional chain does not stop at the system boundary: system
@@ -80,34 +97,20 @@ package memo_architecture_functional_functions {
80
97
  // component is a responsibility nobody has accepted.
81
98
  action def ComponentFunction specializes MemoFunction;
82
99
 
83
- // Named traceable route between functions. Native `flow of` usages carry
84
- // the transported item; this element exists for the budgets and assurance
85
- // attributes below.
86
- //
87
- // The reason is MEMO's grammar, NOT the language — the earlier wording here
88
- // said "attributes that a flow usage cannot own", and that was a false
89
- // claim about SysML v2. The standard's `FlowUsage` is
90
- // `OccurrenceUsagePrefix 'flow' FlowDeclaration DefinitionBody`
91
- // (SysML-textual-bnf.kebnf:829), so a conforming flow usage takes a name
92
- // from its `UsageDeclaration` and owns attributes in its body like any
93
- // other usage. MEMO's own production is
94
- // `'flow' 'of' itemType 'from' … 'to' … ';'` — no name, no body — so a
95
- // MEMO flow can carry neither an `id` nor a latency budget, and nothing
96
- // can refer to it. Every MEMO element rests on the identification core in
97
- // memo_core_common, and an anonymous attribute-less edge cannot join it.
100
+ // A transfer between two functions, carrying the budgets and assurance
101
+ // attributes a reader needs on the transfer itself. Authored as a typed
102
+ // named flow from an `out` parameter of one function to an `in` parameter
103
+ // of another:
98
104
  //
99
- // So this part def is a workaround for a MEMO gap, not a design MEMO is
100
- // entitled to. Restoring the two dropped clauses is what would let it
101
- // collapse into the flow it stands in for.
102
- part def FunctionalExchange specializes MemoPart {
105
+ // flow lfFlowCommand : FunctionalExchange
106
+ // from fnManageInfusion.flowCommandOut to fnCommandPump.flowCommandIn {
107
+ // attribute :>> latencyBudgetMs = 20.0;
108
+ // }
109
+ abstract flow def FunctionalExchange {
103
110
  attribute flowKind : FlowKind;
104
111
  attribute latencyBudgetMs : Real;
105
112
  attribute staleAfterMs : Real;
106
113
  attribute integrityLevel : String;
107
- // MemoFunction, not SystemFunction: an exchange between two component
108
- // functions is the ordinary case once the chain is decomposed.
109
- ref sourceFunction : MemoFunction[0..1];
110
- ref targetFunction : MemoFunction[0..1];
111
114
  }
112
115
 
113
116
  // A system function enables operational work; it does not perform it.
@@ -132,14 +135,25 @@ package memo_architecture_functional_functions {
132
135
  attribute safetyRelevant : Boolean;
133
136
  attribute securityRelevant : Boolean;
134
137
  }
135
- action def FunctionalFlowStep specializes MemoAction {
136
- ref function : MemoFunction[0..1];
137
- ref exchange : FunctionalExchange[0..1];
138
- ref item exchangedItem : MemoItem[0..1];
139
- }
138
+ // A step is not a definition. `action def FunctionalFlowStep` stood here
139
+ // with `ref function`, `ref exchange` and `ref item exchangedItem`: a
140
+ // wrapper that pointed at the function it stood for. A step is that
141
+ // function performed at one position in the flow, which SysML says
142
+ // directly as an action usage nested in the flow that subsets it:
143
+ //
144
+ // action fcPatientBolus : FunctionalFlow {
145
+ // action fcsBolusCommand :> fnManageInfusion { out item flowCommand :> cdFlowCommand; }
146
+ // action fcsBolusActuate :> fnCommandPump { in item flowCommand :> cdFlowCommand; }
147
+ // first fcsBolusCommand then fcsBolusActuate;
148
+ // flow from fcsBolusCommand.flowCommand to fcsBolusActuate.flowCommand;
149
+ // }
150
+ //
151
+ // Each position keeps its own identity and evidence scope. The exchanged
152
+ // item is a directed parameter of the step, and the exchange a `flow`
153
+ // between two steps' parameters. A step's parameters redefine its
154
+ // function's by position.
140
155
 
141
156
  // `InvolvesFunction` is native `perform` (R10-S6): a `FunctionalFlow`
142
- // already names its functions via its step chain
143
- // (`perform <step>;` + the step's own `ref function`), and a flow with no
144
- // step chain performs its functions directly.
157
+ // performs the function each of its steps subsets, and a flow with no
158
+ // steps performs its functions directly.
145
159
  }
@@ -0,0 +1,14 @@
1
+ // The functional (system) analysis layer as one package.
2
+ //
3
+ // A layer is a namespace of packages: every package whose name begins
4
+ // `memo_architecture_functional_`. This package publicly imports each of them, so
5
+ // `public import memo_architecture_functional::*;` in a methodology's package selects the whole
6
+ // layer, and the same import in any package makes the layer's definitions
7
+ // visible. It declares nothing of its own. test/package.test.mjs holds the list
8
+ // to exactly the packages in the namespace, so a package added to the layer is
9
+ // selected with it.
10
+ package memo_architecture_functional {
11
+ public import memo_architecture_functional_behavior::*;
12
+ public import memo_architecture_functional_constraints::*;
13
+ public import memo_architecture_functional_functions::*;
14
+ }
@@ -0,0 +1,21 @@
1
+ // The implementation (software, hardware, user interface) layer as one package.
2
+ //
3
+ // A layer is a namespace of packages: every package whose name begins
4
+ // `memo_architecture_implementation_`. This package publicly imports each of them, so
5
+ // `public import memo_architecture_implementation::*;` in a methodology's package selects the whole
6
+ // layer, and the same import in any package makes the layer's definitions
7
+ // visible. It declares nothing of its own. test/package.test.mjs holds the list
8
+ // to exactly the packages in the namespace, so a package added to the layer is
9
+ // selected with it.
10
+ package memo_architecture_implementation {
11
+ public import memo_architecture_implementation_hardware_common::*;
12
+ public import memo_architecture_implementation_hardware_electrical::*;
13
+ public import memo_architecture_implementation_hardware_fluidic::*;
14
+ public import memo_architecture_implementation_hardware_mechanical::*;
15
+ public import memo_architecture_implementation_hardware_optical::*;
16
+ public import memo_architecture_implementation_hardware_sensing::*;
17
+ public import memo_architecture_implementation_hardware_structure::*;
18
+ public import memo_architecture_implementation_software_runtime::*;
19
+ public import memo_architecture_implementation_software_structure::*;
20
+ public import memo_architecture_implementation_ui::*;
21
+ }
@@ -78,4 +78,11 @@ package memo_architecture_implementation_software_runtime {
78
78
  // a component belongs to without claiming to describe it.
79
79
  }
80
80
 
81
+ // A runtime service or process that exists only because an OTS module is
82
+ // deployed. Optional: a library the product links normally needs only the
83
+ // module.
84
+ part def OTSSoftwareComponent specializes SoftwareComponent {
85
+ ref sourceModule : OTSSoftwareModule[0..1];
86
+ }
87
+
81
88
  }
@@ -24,10 +24,9 @@ package memo_architecture_implementation_software_structure {
24
24
  // software view inherits it rather than re-declaring it: the code view
25
25
  // (SoftwareModule), the runtime view (SoftwareComponent), the system, and
26
26
  // the user interface (memo_architecture_implementation_ui::UIElement).
27
- // Structural software decomposition is part-native. IEC 62304 also uses
28
- // the term "software item" for this concept, but reserving SoftwareItem
29
- // for the native SysML item family keeps structural parts and exchanged
30
- // values unambiguous in the model.
27
+ // Structural software decomposition is part-native. The standard's
28
+ // "software item" is this part, not an `item def`: exchanged or stored
29
+ // values are DataItem, below.
31
30
  abstract part def SoftwareElement specializes MemoPart {
32
31
  attribute safetyClass : SafetyClassKind;
33
32
  attribute complexity : ComplexityKind;
@@ -40,7 +39,8 @@ package memo_architecture_implementation_software_structure {
40
39
 
41
40
  // Module-view element (design responsibility). Runtime properties
42
41
  // (period, WCET, scheduling) moved to SoftwareComponent.
43
- // item / unit / package / library / code / firmware / soup (IEC 62304).
42
+ // item / unit / package / library / code / firmware (IEC 62304). SOUP is
43
+ // a type (SOUPSoftwareModule), not a value here.
44
44
  enum def ModuleKind {
45
45
  enum 'item';
46
46
  enum unit;
@@ -48,7 +48,6 @@ package memo_architecture_implementation_software_structure {
48
48
  enum 'library';
49
49
  enum code;
50
50
  enum firmware;
51
- enum soup;
52
51
  }
53
52
 
54
53
  part def SoftwareModule specializes SoftwareElement {
@@ -62,12 +61,6 @@ package memo_architecture_implementation_software_structure {
62
61
  attribute internallyDeveloped : Boolean[0..1];
63
62
  attribute firmwareTarget : String[0..1];
64
63
  attribute updateMechanism : String[0..1];
65
- // SOUP (IEC 62304 §8) — set only when moduleKind = soup
66
- attribute soupVersion : String[0..1];
67
- attribute soupVendor : String[0..1];
68
- attribute knownAnomalies : String[0..1];
69
- attribute riskAcceptance : String[0..1];
70
- attribute soupClassification : SOUPClassificationKind[0..1];
71
64
  }
72
65
 
73
66
  part def Algorithm specializes MemoPart {
@@ -85,20 +78,68 @@ package memo_architecture_implementation_software_structure {
85
78
  attribute version : String;
86
79
  }
87
80
 
88
- // Software data/content that may be stored or exchanged through ports.
89
- abstract item def SoftwareItem specializes MemoItem {
81
+ // Data content that may be stored or exchanged through ports. Named
82
+ // DataItem, not SoftwareItem: IEC 62304 uses "software item" for a
83
+ // structural part of a program (a SoftwareElement here), and the item
84
+ // family is the exchanged or stored value.
85
+ abstract item def DataItem specializes MemoItem {
90
86
  attribute schemaIdentifier : String;
91
87
  attribute schemaVersion : String;
92
88
  attribute :>> encoding : String;
93
89
  attribute :>> timestampRequired : Boolean;
94
90
  }
95
91
 
96
- item def SBOMEntry specializes SoftwareItem {
92
+ // SOUP and OTS (IEC 62304 §3.29). The standard's SOUP definition covers
93
+ // off-the-shelf software and also previously developed software that
94
+ // lacks development records, so OTS is the narrower type: every OTS
95
+ // module is SOUP, and SOUP also covers legacy in-house code with no
96
+ // supplier, license or package to record. SOUP is a type, not a
97
+ // module-kind value; the CR-MED-015..017 closure rules apply to it and so
98
+ // to OTS.
99
+ //
100
+ // §8.1.2 (SOUP identification: supplier, version) and §7.1.3 (published
101
+ // anomaly lists) are SOUP obligations, so those attributes sit here; the
102
+ // acquisition identity of a bought or downloaded package sits on
103
+ // OTSSoftwareModule.
104
+ part def SOUPSoftwareModule specializes SoftwareModule {
105
+ attribute supplier : String[0..1];
106
+ attribute version : String[0..1];
107
+ attribute knownAnomalies : String[0..1];
108
+ attribute riskAcceptance : String[0..1];
109
+ attribute soupClassification : SOUPClassificationKind[0..1];
110
+ }
111
+ part def OTSSoftwareModule specializes SOUPSoftwareModule {
112
+ attribute licenseExpression : String;
113
+ attribute packageUrl : String;
114
+ attribute checksum : String;
115
+ }
116
+
117
+ enum def SbomFormatKind {
118
+ enum spdx;
119
+ enum cycloneDx;
120
+ enum other;
121
+ }
122
+
123
+ // An SBOM is a document; its entries are inventory records. An entry
124
+ // names one software element and says what is known about it as shipped.
125
+ // Vulnerabilities, anomalies and risks are separate objects that point at
126
+ // the entry; they are not attributes of the document.
127
+ part def SBOMEntry specializes MemoPart {
97
128
  attribute componentName : String;
98
129
  attribute version : String;
99
130
  attribute supplier : String;
100
- attribute license : String;
101
- attribute hash : String;
131
+ attribute licenseExpression : String;
132
+ attribute checksum : String;
133
+ attribute packageUrl : String;
134
+ attribute bomReference : String;
135
+ ref inventoriedElement : SoftwareElement[0..1];
136
+ }
137
+ part def SoftwareBillOfMaterials specializes MemoPart {
138
+ attribute sbomFormat : SbomFormatKind;
139
+ attribute specVersion : String;
140
+ attribute generationTool : String;
141
+ attribute generatedOn : String;
142
+ part sbomEntry : SBOMEntry[0..*];
102
143
  }
103
144
 
104
145
  // `ModuleUses` is native `dependency` (R10-S6): write
@@ -299,7 +299,7 @@ package memo_architecture_implementation_ui {
299
299
  // `PresentsState` had zero usages anywhere in the tree (R10-S6). Its
300
300
  // audited native form, `exhibit state`, does not actually fit: `UIState`
301
301
  // is a `part def` with plain string attributes, not a `state def`, and
302
- // SysIDE rejects `exhibit` referencing anything that does not conform to
302
+ // a SysML v2 compiler rejects `exhibit` referencing anything that does not conform to
303
303
  // `States::StateAction` ("An exhibit state must reference another
304
304
  // state"). Free deletion rather than a migration — nothing referenced
305
305
  // it, so nothing to preserve. If `UIState` is ever restructured onto a