@memoarchitect/ontology 0.13.2 → 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 (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 +51 -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
@@ -1,3 +1,39 @@
1
+ // Logical interfaces: the Interface definition, ports, exchange items, and
2
+ // the component exchange.
3
+ //
4
+ // ─── A component exchange is an interface ────────────────────────────────
5
+ //
6
+ // `ComponentExchange` is an `interface def`: the edge between two ports IS
7
+ // the exchange. It was a `part def` whose `sourceEndpoint`/`targetEndpoint`
8
+ // refs named the ports, beside a separate `flow` or `bind` naming them again,
9
+ // and CR-ONT-076 existed only to keep the two representations in step. It
10
+ // also lost information: the builder stored a dotted ref value as its first
11
+ // segment only, so every endpoint read as the enclosing device, and
12
+ // CR-ONT-072/073 checked the device instead of the port.
13
+ //
14
+ // Its ends are the ports, and they are ports, never components: §6.2 of the
15
+ // architecture plan requires an actual boundary port, and a rule
16
+ // (CR-ONT-072/073) says so because the compiler does not — it accepts a
17
+ // part at an interface end even when the definition types its ends.
18
+ //
19
+ // ─── Transport, delegation, and the choice between them ──────────────────
20
+ //
21
+ // Two ports joined by an interface still need a statement of what moves:
22
+ // the `flow` between the same two ports. The interface is the path, and the
23
+ // flow is the transfer over it.
24
+ //
25
+ // An enclosing part's boundary port and the port of a part inside it are a
26
+ // different case, decided per hop:
27
+ //
28
+ // flow when the hop has something of its own to model: a delay, a
29
+ // queue, a timing or latency budget, a protocol. Write it inside
30
+ // the enclosing part's body, where the boundary port is a source.
31
+ // binding when the boundary port is the inner port exposed and nothing
32
+ // happens between them: `binding name bind outer = inner { … }`,
33
+ // carrying the connection's identity and citation in its body.
34
+ //
35
+ // A delegation that is a binding is not a ComponentExchange: nothing
36
+ // interacts, and one feature is seen from both sides.
1
37
  package memo_architecture_logical_interfaces {
2
38
  private import ScalarValues::*;
3
39
 
@@ -15,40 +51,40 @@ package memo_architecture_logical_interfaces {
15
51
  // DigitalInterface / SPIInterface / RestInterface … hierarchy: those were
16
52
  // 20+ classes that differed only in the value of `protocol`.
17
53
 
54
+ // The common contract of an interface, whatever layer it is on: what
55
+ // crosses, which way, under what timing, and how much it matters to
56
+ // safety and security. It is abstract. An interface is a LOGICAL one
57
+ // (between components, in terms of what is exchanged), a SOFTWARE one
58
+ // (a contract between software items) or a PHYSICAL one (between
59
+ // hardware ports), and those are three different things that share
60
+ // attributes, not one thing with three sets of optional fields. Each
61
+ // specialization adds only what its layer can state: PhysicalInterface
62
+ // the signal and the medium, SoftwareInterface the API.
63
+ //
18
64
  // Specializes the standard library interface as well as MEMO's base,
19
65
  // rather than shadowing it — see the note on UseCase.
20
- interface def Interface specializes MemoInterface, Interfaces::Interface {
21
- attribute interfaceKind : InterfaceKind; // semantic + signaling family
66
+ abstract interface def Interface specializes MemoInterface, Interfaces::Interface {
67
+ attribute interfaceKind : InterfaceKind; // what crosses
22
68
  attribute direction : DirectionKind;
23
69
  attribute protocol : String; // "SPI", "CAN", "Ethernet", "REST", "4-20mA"
24
70
  attribute protocolSemantics : String;
71
+ attribute timeoutMs : Real[0..1];
72
+ attribute retryPolicy : String[0..1];
25
73
  attribute interactionPattern : String; // request-response, pub-sub, streaming…
26
- attribute signalKind : String;
27
74
  attribute timingSummary : String;
28
75
  attribute timingConstraint : String;
29
76
  attribute bandwidth : String;
30
- attribute schemaReference : String;
31
77
  attribute compatibilitySummary : String;
32
78
  attribute isolationRequirement : String;
33
79
  attribute safetyRelevant : Boolean;
34
80
  attribute securityCriticality : CriticalityKind;
35
81
  // Applied-part/patient-contact interfaces (IEC 60601-1) must state it.
36
82
  attribute patientContactInterface : Boolean;
37
- // ── hardware-signal descriptors (optional) ──
38
- attribute directionality : DirectionKind[0..1];
39
- attribute electricalStandard : String;
40
- attribute nominalVoltageV : Real[0..1];
41
- attribute nominalCurrentA : Real[0..1];
42
- attribute bitRateBps : String;
43
- attribute signaling : String;
44
- attribute signalRange : String;
45
- // ── software-API descriptors (optional) ──
46
- attribute apiStyle : String;
47
83
  }
48
84
 
49
- // Software interaction contracts specialize the native MEMO interface
50
- // family. Concrete technologies add their protocol roles and message
51
- // flows; ports remain the endpoints that components actually own.
85
+ // Software interaction contracts. Concrete technologies add their
86
+ // protocol roles and message flows; ports remain the endpoints that
87
+ // components actually own.
52
88
  abstract interface def SoftwareInterface specializes Interface {
53
89
  // `default`, not `=`. A bare `=` in a definition BINDS the value, and
54
90
  // a binding cannot be overridden by a usage — which asserted that
@@ -56,6 +92,8 @@ package memo_architecture_logical_interfaces {
56
92
  // inexpressible. A ROS topic publisher → subscriber is the obvious
57
93
  // counterexample, and it is the common case rather than an exotic one.
58
94
  attribute :>> direction default DirectionKind::inputOutput;
95
+ attribute apiStyle : String;
96
+ attribute schemaReference : String;
59
97
  }
60
98
 
61
99
  // A typed thing exchanged at a boundary. Concrete items such as
@@ -87,48 +125,19 @@ package memo_architecture_logical_interfaces {
87
125
  port def SensorPort specializes DataPort { attribute sensorDomain : String; }
88
126
  port def CommandPort specializes DataPort { attribute commandDomain : String; }
89
127
 
90
- part def ComponentExchange specializes MemoPart {
128
+ // An interaction between two component ports, and the properties of that
129
+ // connection itself: what kind of thing it carries and its timing
130
+ // discipline. Authored as a typed named interface between the two ports,
131
+ // with the transport over it as a `flow` between the same ports:
132
+ //
133
+ // interface ceTlmOutToOutput : ComponentExchange
134
+ // connect tlm.portTlmModeOut to outputBus.portOutputTlmModeIn {
135
+ // attribute :>> exchangeKind = FlowKind::status;
136
+ // }
137
+ // flow ceTlmOutToOutputFlow of InterfaceItem
138
+ // from tlm.portTlmModeOut to outputBus.portOutputTlmModeIn;
139
+ interface def ComponentExchange specializes MemoInterface {
91
140
  attribute exchangeKind : FlowKind;
92
- // Metaclass-neutral endpoints. CR-ONT-002 used to read: "Typed
93
- // endpoints. A component or a boundary port may terminate an exchange,
94
- // so the ends are MemoPart-typed." That reasoning was circular —
95
- // PhysicalPort and SoftwarePort are part defs precisely SO THAT they
96
- // could satisfy this typing, and the typing was justified by their
97
- // being parts. Track A0 cut the circle at the ends, which is the side
98
- // that has to move first: A1 turns those two into `port def`s, and a
99
- // port cannot specialize a part-based type.
100
- //
101
- // The constraint the type was carrying — an endpoint is a component or
102
- // a boundary port, never a requirement or a document — is now stated
103
- // where it can be checked across metaclasses, as CR-ONT-072/073 in
104
- // src/rules/ontology/ontology_invariants.sysml.
105
- //
106
- // `Base::Anything` rather than no type at all — the only place in this
107
- // change that reaches for it. The 36 untyped ends in
108
- // memo_core_relationships are `end` declarations, and an untyped `end`
109
- // is established practice; an untyped `ref` with a multiplicity is not
110
- // something MEMO's own grammar accepts (`Expecting token of type ';'
111
- // but found '['`), and the grammar is not in this session's scope.
112
- // `Base::Anything` is what the standard's `Allocations::Allocation`
113
- // types its own ends with, so it is the conforming spelling of "any
114
- // element", not a workaround.
115
- ref sourceEndpoint : Base::Anything[0..1];
116
- ref targetEndpoint : Base::Anything[0..1];
117
- // `sourcePortPath` / `targetPortPath` are GONE. They were String
118
- // "descriptive port paths (e.g. TLM.TLM_MODE_OUT) for AADL round-trips;
119
- // labels only — never references", which is §13.3's string
120
- // pseudo-reference: nothing can follow a string to an element, so
121
- // anything built on them produced no traceability.
122
- //
123
- // Measured across the 92 sites in the GPCA example before removing
124
- // them: 23 merely restated the endpoint the ref already named (15 gave
125
- // the port's own display name, 8 were prose like "HW-001:
126
- // GPCA_HW_Sensors"), and the other 69 named a port ON the endpoint
127
- // component, resolving to 49 distinct AADL features. Those 49 are
128
- // declared as real ports now and the endpoint refs point straight at
129
- // them, which is what Track A1 making SoftwarePort a `port def` is for.
130
- // The AADL round-trip is better served by an element than by its name.
131
- ref allocatedExchanges : FunctionalExchange[0..*];
132
141
  attribute direction : DirectionKind;
133
142
  // Connection timing discipline from the source architecture
134
143
  // (e.g. AADL Communication_Properties::Timing — immediate
@@ -0,0 +1,13 @@
1
+ // The logical architecture layer as one package.
2
+ //
3
+ // A layer is a namespace of packages: every package whose name begins
4
+ // `memo_architecture_logical_`. This package publicly imports each of them, so
5
+ // `public import memo_architecture_logical::*;` 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_logical {
11
+ public import memo_architecture_logical_interfaces::*;
12
+ public import memo_architecture_logical_structure::*;
13
+ }
@@ -10,6 +10,7 @@ package memo_architecture_logical_structure {
10
10
  private import memo_core_common::*;
11
11
  private import memo_core_enumerations::*;
12
12
  private import memo_core_relationships::*;
13
+ private import memo_architecture_logical_interfaces::Interface;
13
14
 
14
15
  // What a logical connection carries: information and control, but also
15
16
  // energy, material, fluid, and mechanical force (§10).
@@ -139,9 +140,8 @@ package memo_architecture_logical_structure {
139
140
 
140
141
  // Boundary features and contracts.
141
142
  port def LogicalPort specializes MemoPort;
142
- interface def LogicalInterface specializes MemoInterface {
143
+ interface def LogicalInterface specializes Interface {
143
144
  attribute contentKind : FlowContentKind;
144
- attribute interactionPattern : String;
145
145
  end providerPort : LogicalPort;
146
146
  end consumerPort : ~LogicalPort;
147
147
  }
@@ -162,14 +162,33 @@ package memo_architecture_logical_structure {
162
162
  :> annotatedElement : SysML::ConnectionUsage;
163
163
  :>> baseType = logicalConnectorLinks meta SysML::Usage;
164
164
  }
165
- // A transfer of a typed item across a connector.
166
- part def LogicalExchange specializes MemoPart {
165
+ // A transfer between two ports, carrying what a reader needs to know about
166
+ // the transfer itself. Authored as a typed named flow between the item
167
+ // features the two ports declare, the way `FunctionalExchange` is between
168
+ // function parameters:
169
+ //
170
+ // part lcMonitor { out port pSpo2Out : LogicalPort { out item spo2 :> spo2Item; } }
171
+ // flow exSpo2ToGateway : LogicalExchange
172
+ // from lcMonitor.pSpo2Out.spo2 to lcGateway.pSpo2In.spo2 {
173
+ // attribute :>> contentKind = FlowContentKind::measurement;
174
+ // }
175
+ //
176
+ // It was a `part def` holding `sourcePort`, `targetPort` and
177
+ // `exchangedItem` refs. No example set either port, so no exchange said
178
+ // what it connected. The flow's ends are those ports now,
179
+ // and its payload the item feature on them. `direction` is not carried
180
+ // over: the ports say `in` and `out`, and a second writable direction is
181
+ // the duplicate §8 of the architecture plan forbids.
182
+ //
183
+ // The ends are not restricted to `LogicalPort`. Two of the three examples
184
+ // move a specimen or a force between hardware parts, and a flow def that
185
+ // named `LogicalPort` ends would have refused them. `payload` is not
186
+ // declared either: `of <type>` on a usage of a flow def that declares a
187
+ // feature is not distinguishable (namespace distinguishability) from the
188
+ // library's own `payload`, so the payload lives on the ports.
189
+ abstract flow def LogicalExchange {
167
190
  attribute contentKind : FlowContentKind;
168
- attribute direction : DirectionKind;
169
191
  attribute latencyRequirement : String;
170
- ref exchangedItem : LogicalExchangeItem[0..1];
171
- ref sourcePort : LogicalPort[0..1];
172
- ref targetPort : LogicalPort[0..1];
173
192
  }
174
193
 
175
194
  // States and modes of the logical solution (kept distinct from UI state
@@ -33,9 +33,12 @@ package memo_architecture_operational_context_stakeholders {
33
33
  enum correspondence;
34
34
  enum 'use';
35
35
  }
36
+ // The governor spans metaclasses — a CorrespondenceRule is a part, an
37
+ // IntendedUse a requirement — so that end stays untyped, as DerivesFrom's
38
+ // driver does. What is governed is always a structural element.
36
39
  connection def Governs :> MemoRelationship {
37
40
  attribute governKind : GovernKind;
38
- end governor : MemoPart :>> source;
41
+ end governor :>> source;
39
42
  end governedElement : MemoPart :>> target;
40
43
  }
41
44
  abstract connection governsLinks : Governs[*];
@@ -0,0 +1,19 @@
1
+ // The operational analysis layer as one package.
2
+ //
3
+ // A layer is a namespace of packages: every package whose name begins
4
+ // `memo_architecture_operational_`. This package publicly imports each of them, so
5
+ // `public import memo_architecture_operational::*;` 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_operational {
11
+ public import memo_architecture_operational_activities::*;
12
+ public import memo_architecture_operational_context_actors::*;
13
+ public import memo_architecture_operational_context_stakeholders::*;
14
+ public import memo_architecture_operational_context_use_context::*;
15
+ public import memo_architecture_operational_scenarios::*;
16
+ public import memo_architecture_operational_structure::*;
17
+ public import memo_architecture_operational_use_cases::*;
18
+ public import memo_architecture_operational_workflows::*;
19
+ }
@@ -1,8 +1,8 @@
1
- // Scenario foundation. A scenario is a selected path through a
2
- // workflow (or functional flow), classified by its kind plus three independent
3
- // dimensions — variant, operational condition, and purpose. An occurrence is an actual or hypothetical execution
4
- // of a scenario. Alternate scenarios reference their base scenario and
5
- // variation point instead of duplicating the workflow.
1
+ // Scenario foundation. A scenario is a selected path through a workflow,
2
+ // classified by its kind (nominal or alternate). It is nested in the workflow
3
+ // it is a path through, so a nominal scenario and its alternates are siblings
4
+ // there. An actual or hypothetical execution is a native usage of the
5
+ // scenario, not a separate element.
6
6
  package memo_architecture_operational_scenarios {
7
7
  private import Metaobjects::SemanticMetadata;
8
8
  private import ScalarValues::*;
@@ -32,9 +32,10 @@ package memo_architecture_operational_scenarios {
32
32
  attribute postCondition : String;
33
33
  attribute pathSummary : String;
34
34
 
35
- // The workflow this scenario belongs to is expressed by the workflow
36
- // (HasScenario); a nominal/alternate pair are scenarios of the same
37
- // workflow, distinguished by scenarioKind — no baseScenario back-ref.
35
+ // The workflow this scenario belongs to is the one it is nested in
36
+ // (a `HasScenario` relation was removed for that reason); a
37
+ // nominal/alternate pair are scenarios of the same workflow,
38
+ // distinguished by scenarioKind — no baseScenario back-ref.
38
39
  // Actors are derived from `perform` on the nested steps, not listed.
39
40
  ref useContext : UseContext[0..1];
40
41
  // threat scenario
@@ -11,8 +11,11 @@ package memo_architecture_operational_structure {
11
11
  // purpose and the root of the operational spine. A MemoMission, because
12
12
  // "mission" has no medical-device meaning — intended use is what a device
13
13
  // exists to do. Was in memo_assurance_requirements; moved here as the
14
- // operational-world root.
15
- part def IntendedUse specializes MemoMission {
14
+ // operational-world root. It is a `requirement def`: the intended use is
15
+ // the top obligation the device's design inputs derive from, and ISO 14971
16
+ // 5.2 asks for it to be documented as the starting point of risk analysis.
17
+ // It was a `part def`, which made it a structural thing.
18
+ requirement def IntendedUse :> MemoMission {
16
19
  attribute indication : String;
17
20
  attribute contraindication : String;
18
21
  attribute patientPopulation : String;
@@ -35,17 +35,24 @@ package memo_architecture_operational_use_cases {
35
35
  attribute postCondition : String;
36
36
  // clinical / service / manufacturing / development
37
37
  attribute useCaseKind : UseCaseKind;
38
+ // A system use case that no clinical use case includes is a finding (rule CR-ONT-086)
39
+ // unless it says so: set this for a use case that is deliberately carried out alone,
40
+ // such as a service procedure. It is not a second kind of use case.
41
+ attribute standalone : Boolean;
38
42
 
39
43
  // The device or system under consideration supports the goal. Native
40
- // `subject`, not `ref` (R10-S6): SysIDE requires an explicit subject
41
- // before a use case can declare `actor` — `case-usage-subject-
42
- // parameter-position` — and "the device/system under consideration"
44
+ // `subject`, not `ref` (R10-S6): a use case needs an explicit subject
45
+ // before it can declare `actor` (the subject parameter comes first),
46
+ // and "the device/system under consideration"
43
47
  // is exactly what a case's subject means, so this was a duplicate
44
48
  // waiting to surface once `actor` needed a subject to attach to.
45
49
  subject supportingSystem : MemoPart[0..1];
46
- ref primaryUser : User[0..1];
47
- ref supportingActors : OperationalParticipant[0..*];
48
50
  ref useContext : UseContext[0..1];
51
+ // Who takes part is native `actor` (`actor <role> = <participant>;`),
52
+ // inherited from `UseCases::UseCase`. `primaryUser` and
53
+ // `supportingActors` refs stood here as a second way of saying the
54
+ // same thing and were removed; which actor initiates is carried by
55
+ // the actor's name, as the note on `Initiates` below says.
49
56
  }
50
57
 
51
58
  connection def Motivates :> MemoRelationship {
@@ -65,7 +72,8 @@ package memo_architecture_operational_use_cases {
65
72
  // named on the use case, not in a relationship type. Write
66
73
  // `actor <role> = <existingElement>;` inside the use case instead.
67
74
  // UML use-case decomposition (`Includes`) is native `include use case` /
68
- // `include` (R10-S6); write that instead of a connection here. `extends`
69
- // has 0 hits in the corpus for a use-case `extend` production, so it stays
70
- // a MEMO construct: a cross-cutting relationship that is always presented.
75
+ // `include` (R10-S6); write that instead of a connection here. SysML v2
76
+ // has no use-case `extend` (the textual BNF defines IncludeUseCaseUsage
77
+ // and nothing for extend), and MEMO does not add one: an optional path
78
+ // through a use case is an alternate scenario, not a second use case.
71
79
  }
@@ -20,7 +20,7 @@ package memo_architecture_realization_deployment {
20
20
  private import memo_core_relationships::*;
21
21
  private import memo_architecture_implementation_software_structure::*;
22
22
  private import memo_architecture_implementation_software_runtime::*;
23
- private import memo_architecture_implementation_hardware_electrical::*; // NetworkMedium
23
+ private import memo_architecture_implementation_hardware_common::PhysicalComponent;
24
24
  private import memo_architecture_realization_physical::*;
25
25
  private import memo_architecture_functional_functions::*;
26
26
  private import memo_architecture_logical_structure::*;
@@ -52,6 +52,24 @@ package memo_architecture_realization_deployment {
52
52
  :> annotatedElement : SysML::AllocationDefinition;
53
53
  :> annotatedElement : SysML::AllocationUsage;
54
54
  :>> baseType = buildsIntoLinks meta SysML::Usage;
55
+ }
56
+ // A logical component is REALIZED BY the hardware or software that implements it. The
57
+ // logical and the implementation architectures are separate structures and stay
58
+ // separate: nothing is nested (a logical component never contains software or a
59
+ // physical part, CR-ONT-078); the two are joined by an allocation, as the language
60
+ // joins structures across domains (SysML-textual-bnf.kebnf:792-801, AllocationDefinition and AllocationUsage) and as SYSMOD
61
+ // does with its `logical2product` allocation, logical architecture to product
62
+ // architecture, logical as the source. The target is any part, as HostedBy's ends are:
63
+ // a hardware assembly and a software system are both MemoParts.
64
+ allocation def RealizedBy :> MemoRelationship, Allocations::Allocation {
65
+ end logicalComponent : LogicalComponent :>> source;
66
+ end realization : MemoPart :>> target;
67
+ }
68
+ abstract connection realizedByLinks : RealizedBy[*];
69
+ metadata def <realizedBy> RealizedByMetadata :> SemanticMetadata {
70
+ :> annotatedElement : SysML::AllocationDefinition;
71
+ :> annotatedElement : SysML::AllocationUsage;
72
+ :>> baseType = realizedByLinks meta SysML::Usage;
55
73
  }
56
74
  // Every usage of this already writes `allocation x : DeploysTo allocate a
57
75
  // to b;` -- the declaration was the only part still saying `connection`.
@@ -92,7 +110,7 @@ package memo_architecture_realization_deployment {
92
110
  // language says so. The double specialization keeps MEMO's identification
93
111
  // core from `MemoRelationship` while adding the standard's allocation
94
112
  // semantics; both root on `Connections::BinaryConnection`, so this is a
95
- // diamond and not a conflict. Verified under `syside check` against a
113
+ // diamond and not a conflict. Verified with a SysML v2 compiler against a
96
114
  // negative control (a non-existent supertype is reported), so the clean
97
115
  // result is the checker agreeing rather than the checker skipping.
98
116
 
@@ -111,17 +129,19 @@ package memo_architecture_realization_deployment {
111
129
  :>> baseType = memoryBindingLinks meta SysML::Usage;
112
130
  }
113
131
 
114
- // AADL `actual_connection_binding`. Which physical medium carries a
115
- // component exchange. The source is the ComponentExchange rather than the
116
- // `ComponentConnects` link, because the exchange is the ELEMENT that owns
117
- // the budget (§19.3) and a link instance is not something the graph can
118
- // bind to; it is also exactly where the latency the medium contributes has
119
- // to be accounted.
132
+ // AADL `actual_connection_binding`. Which physical thing carries an
133
+ // interface: a network medium under a component exchange, a cable or
134
+ // harness under a hardware `Interface`, a connector, a tube. The source is
135
+ // the interface usage rather than a link, because the interface is the
136
+ // ELEMENT that owns the budget (§19.3) and a link instance is not
137
+ // something the graph can bind to; it is also exactly where the latency
138
+ // the medium contributes has to be accounted. Ends are the two bases
139
+ // (MemoInterface, PhysicalComponent) so one binding serves every layer.
120
140
  allocation def ConnectionBinding :> MemoRelationship, Allocations::Allocation {
121
141
  attribute allocatedBandwidth : String;
122
142
  attribute mediumLatencyMs : Real;
123
- end boundExchange : ComponentExchange :>> source;
124
- end medium : NetworkMedium :>> target;
143
+ end boundExchange : MemoInterface :>> source;
144
+ end medium : PhysicalComponent :>> target;
125
145
  }
126
146
  abstract connection connectionBindingLinks : ConnectionBinding[*];
127
147
  metadata def <connectionBinding> ConnectionBindingMetadata :> SemanticMetadata {
@@ -0,0 +1,13 @@
1
+ // The realization (deployment and physical) layer as one package.
2
+ //
3
+ // A layer is a namespace of packages: every package whose name begins
4
+ // `memo_architecture_realization_`. This package publicly imports each of them, so
5
+ // `public import memo_architecture_realization::*;` 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_realization {
11
+ public import memo_architecture_realization_deployment::*;
12
+ public import memo_architecture_realization_physical::*;
13
+ }
@@ -6,6 +6,7 @@ package memo_architecture_realization_physical {
6
6
 
7
7
  private import memo_core_common::*;
8
8
  private import memo_core_enumerations::*;
9
+ private import memo_architecture_logical_interfaces::Interface;
9
10
  // For PhysicalElement: a processing node and a memory device ARE physical
10
11
  // things — a board and a chip — and specialized MemoPart directly only
11
12
  // because the physical family had no shared root until CR-ONT-079 needed
@@ -58,4 +59,64 @@ package memo_architecture_realization_physical {
58
59
  attribute portCategory : PortCategoryKind;
59
60
  attribute connectorType : String;
60
61
  }
62
+
63
+ // ─── Connecting hardware ─────────────────────────────────────────────
64
+ //
65
+ // Hardware is parts with ports. A port on one part is joined to a port on
66
+ // another by a PhysicalInterface, and what crosses it is a PhysicalFlow.
67
+ // They are the hardware-layer counterparts of LogicalInterface and
68
+ // LogicalExchange, and of SoftwareInterface: the same shape, but each
69
+ // states only what its layer can, so a hardware interface is never
70
+ // described in terms of a software API or a logical content kind.
71
+ //
72
+ // The interface is the CONTRACT (an `interface` usage joins two specific
73
+ // ports; the def says what kind of link it is). The plug, cable, header
74
+ // or tube that physically carries it is a part of its own (Cable,
75
+ // PhysicalConnectorPart, ...), related to the interface by a
76
+ // ConnectionBinding allocation. PhysicalPort.connectorType names what a
77
+ // port exposes.
78
+ //
79
+ // part pump {
80
+ // out port pMotorDrive : PhysicalPort { out item drive; }
81
+ // }
82
+ // part driver {
83
+ // in port pMotorIn : PhysicalPort { in item drive; }
84
+ // }
85
+ // part motorHarness : Cable;
86
+ // interface cnMotorDrive : PhysicalInterface
87
+ // connect pump.pMotorDrive to driver.pMotorIn {
88
+ // attribute :>> signalingKind = SignalingKind::pulse;
89
+ // attribute :>> nominalVoltageV = 3.3;
90
+ // }
91
+ // flow flMotorDrive : PhysicalFlow
92
+ // from pump.pMotorDrive.drive to driver.pMotorIn.drive {
93
+ // attribute :>> quantity = "step pulses";
94
+ // }
95
+ // allocation cbMotorDrive : ConnectionBinding
96
+ // allocate cnMotorDrive to motorHarness;
97
+ interface def PhysicalInterface specializes Interface {
98
+ // analog, digital, discrete, pulse or power transfer. Fill in the
99
+ // descriptors that kind needs: a range for analog, a bit rate and
100
+ // protocol for digital, a frequency for pulse.
101
+ attribute signalingKind : SignalingKind;
102
+ attribute mediumKind : PhysicalMediumKind;
103
+ attribute electricalStandard : String;
104
+ attribute nominalVoltageV : Real[0..1];
105
+ attribute nominalCurrentA : Real[0..1];
106
+ attribute bitRateBps : String;
107
+ attribute signalRange : String;
108
+ attribute connectorStandard : String;
109
+ end sourcePort : PhysicalPort;
110
+ end targetPort : PhysicalPort;
111
+ }
112
+
113
+ // What crosses a physical interface, as a quantity: a voltage, a
114
+ // current, a pressure, a force, a flow of fluid.
115
+ abstract flow def PhysicalFlow {
116
+ attribute quantity : String;
117
+ attribute unit : String;
118
+ attribute nominalValue : String;
119
+ attribute minValue : String;
120
+ attribute maxValue : String;
121
+ }
61
122
  }
@@ -0,0 +1,87 @@
1
+ // Features and design options.
2
+ //
3
+ // A design option is native SysML: a `variation` (a definition or a usage whose
4
+ // body holds only `variant` members; SysML-textual-bnf.kebnf:224 for the definition
5
+ // prefix, :282 for the usage prefix, :254-256 the variant member). MEMO adds
6
+ // nothing to how one is written. What SysML has no word for is WHY a variant exists
7
+ // and WHICH ones go together: that is a product feature.
8
+ //
9
+ // part featEuMarket : ProductFeature; // the market EU releases target
10
+ // variation part energyOutput : LogicalComponent {
11
+ // variant part euOutput : LogicalComponent; // a variant, for the EU
12
+ // variant part usOutput : LogicalComponent;
13
+ // }
14
+ // #RealizesFeature dependency from energyOutput::euOutput to featEuMarket;
15
+ // connection : RequiresFeature connect ... // one feature needs another
16
+ //
17
+ // A release selects features (`#SelectsFeature`), and through them the variants it
18
+ // contains; a rule counts one variant per variation point from that. A feature is
19
+ // a usage like any other part, named by the family, and a platform package may
20
+ // declare the family's features once.
21
+ //
22
+ // A variation point cannot own attributes: SysIDE rejects an owned feature in a
23
+ // variation (`usage-variation-owned-feature-membership`). Identity metadata is an
24
+ // annotation and is allowed (measured on E0, 2026-10-13); `status` and anything else
25
+ // a variation point would carry goes on its variants.
26
+ package memo_architecture_variability {
27
+ private import Metaobjects::SemanticMetadata;
28
+ private import ScalarValues::*;
29
+
30
+ private import memo_core_common::*;
31
+ private import memo_core_enumerations::*;
32
+ private import memo_core_relationships::*;
33
+
34
+ // Named ProductFeature, not Feature: `Feature` is the KerML metaclass, and the
35
+ // builder falls back to a metaclass name for a kind it cannot place.
36
+ //
37
+ // A feature's page is what is said about it: its prose is the element's `doc`, and
38
+ // the analysis is these four statements, each optional until someone has an answer.
39
+ // What the feature shows is curated: `#ShowsView` below names its views.
40
+ part def ProductFeature specializes MemoPart {
41
+ /** What the feature gives the people who use the product, in a sentence or two. */
42
+ attribute valueProposition : String[0..1];
43
+ /** Who it is for: the roles or segments that gain from it. */
44
+ attribute targetUsers : String[0..1];
45
+ /** How anyone will know it worked: the measure, and the level that counts as success. */
46
+ attribute successMeasure : String[0..1];
47
+ /** What has to hold for the value to be real, and what is not yet known. */
48
+ attribute assumptions : String[0..1];
49
+ }
50
+
51
+ // `Requires` is taken by the native `require` relation, so these say what they join.
52
+ connection def RequiresFeature :> MemoRelationship {
53
+ doc /* Selecting the source feature needs the target feature selected too. */
54
+ end dependentFeature : ProductFeature :>> source;
55
+ end requiredFeature : ProductFeature :>> target;
56
+ }
57
+ abstract connection requiresFeatureLinks : RequiresFeature[*];
58
+ metadata def <requiresFeature> RequiresFeatureMetadata :> SemanticMetadata {
59
+ :> annotatedElement : SysML::ConnectionDefinition;
60
+ :> annotatedElement : SysML::ConnectionUsage;
61
+ :>> baseType = requiresFeatureLinks meta SysML::Usage;
62
+ }
63
+
64
+ connection def ExcludesFeature :> MemoRelationship {
65
+ doc /* The two features cannot be selected together. Symmetric: either end may be written first. */
66
+ end firstFeature : ProductFeature :>> source;
67
+ end secondFeature : ProductFeature :>> target;
68
+ }
69
+ abstract connection excludesFeatureLinks : ExcludesFeature[*];
70
+ metadata def <excludesFeature> ExcludesFeatureMetadata :> SemanticMetadata {
71
+ :> annotatedElement : SysML::ConnectionDefinition;
72
+ :> annotatedElement : SysML::ConnectionUsage;
73
+ :>> baseType = excludesFeatureLinks meta SysML::Usage;
74
+ }
75
+
76
+ // Typed dependencies (memo_core_relationships::MemoTypedDependency): the variant
77
+ // is nested in its variation, so it is a dependency's client by qualified name.
78
+ metadata def RealizesFeature :> MemoTypedDependency {
79
+ doc /* `#RealizesFeature dependency from <variant> to <feature>;` The variant exists to give the family this feature. */
80
+ }
81
+ metadata def SelectsFeature :> MemoTypedDependency {
82
+ doc /* `#SelectsFeature dependency from <release> to <feature>, <feature>;` The release contains the variants that realize these features. */
83
+ }
84
+ metadata def ShowsView :> MemoTypedDependency {
85
+ doc /* `#ShowsView dependency from <feature> to <view>, <view>;` The views the feature's viewpoint lists: chosen for what the feature demonstrates, not found by a rule. */
86
+ }
87
+ }