@memoarchitect/ontology 0.12.1 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/README.md +5 -3
  2. package/examples/connected-patient-monitor/memo.identity.yaml +34 -0
  3. package/examples/connected-patient-monitor/memo.package.yaml +3 -1
  4. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +17 -12
  5. package/examples/connected-patient-monitor/model/{catalog → methodology}/project.sysml +4 -5
  6. package/examples/embedded-infusion-pump/memo.package.yaml +3 -1
  7. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +6 -6
  8. package/examples/embedded-infusion-pump/model/{catalog → methodology}/project.sysml +4 -5
  9. package/examples/functional-logical-physical/memo.identity.yaml +28 -0
  10. package/examples/functional-logical-physical/memo.package.yaml +3 -1
  11. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +5 -5
  12. package/examples/functional-logical-physical/model/{catalog → methodology}/project.sysml +4 -5
  13. package/examples/gpca-pump/analysis/Samples/01-model-overview.ipynb +40 -139
  14. package/examples/gpca-pump/analysis/Samples/02-architecture-hotspots.ipynb +38 -290
  15. package/examples/gpca-pump/analysis/Samples/03-model-quality.ipynb +47 -217
  16. package/examples/gpca-pump/analysis/Samples/04-change-impact-explorer.ipynb +50 -191
  17. package/examples/gpca-pump/analysis/Samples/05-model-charts.ipynb +42 -181
  18. package/examples/gpca-pump/analysis/Samples/06-ownership-graph.ipynb +40 -164
  19. package/examples/gpca-pump/analysis/Samples/07-model-inventory-table.ipynb +51 -172
  20. package/examples/gpca-pump/analysis/Samples/README.md +15 -9
  21. package/examples/gpca-pump/analysis/memo_model.py +243 -0
  22. package/examples/gpca-pump/memo.identity.yaml +521 -26
  23. package/examples/gpca-pump/memo.package.yaml +3 -1
  24. package/examples/gpca-pump/methodology/gpca_profiles.sysml +56 -47
  25. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +51 -78
  26. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +359 -358
  27. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +9 -9
  28. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +56 -69
  29. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +44 -59
  30. package/examples/gpca-pump/model/catalog/gpca_context.sysml +23 -35
  31. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +33 -40
  32. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +62 -63
  33. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +362 -483
  34. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +45 -70
  35. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +6 -12
  36. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +173 -169
  37. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +139 -225
  38. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +43 -47
  39. package/examples/gpca-pump/model/catalog/gpca_system.sysml +68 -65
  40. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +147 -116
  41. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +65 -91
  42. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +4 -6
  43. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +4 -6
  44. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +4 -6
  45. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +4 -6
  46. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +2 -4
  47. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +7 -6
  48. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +4 -6
  49. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +4 -6
  50. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +3 -5
  51. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +4 -6
  52. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +4 -6
  53. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +3 -5
  54. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +3 -5
  55. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +4 -6
  56. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +2 -4
  57. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +3 -5
  58. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +2 -4
  59. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +4 -6
  60. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +4 -6
  61. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +2 -4
  62. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +4 -6
  63. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +4 -6
  64. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +3 -5
  65. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +4 -6
  66. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +3 -5
  67. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +2 -4
  68. package/examples/gpca-pump/model/{catalog → methodology}/project.sysml +8 -6
  69. package/examples/ivd-laboratory-system/memo.package.yaml +3 -1
  70. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +12 -9
  71. package/examples/ivd-laboratory-system/model/{catalog → methodology}/project.sysml +4 -5
  72. package/examples/manual-surgical-instrument/memo.package.yaml +3 -1
  73. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +2 -6
  74. package/examples/manual-surgical-instrument/model/{catalog → methodology}/project.sysml +4 -5
  75. package/examples/multidimensional-layers/memo.package.yaml +3 -1
  76. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +2 -4
  77. package/examples/multidimensional-layers/model/{catalog → methodology}/project.sysml +4 -5
  78. package/examples/nested-architecture-dsm/memo.identity.yaml +93 -0
  79. package/examples/nested-architecture-dsm/memo.package.yaml +3 -1
  80. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +30 -30
  81. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +28 -28
  82. package/examples/nested-architecture-dsm/model/catalog/architecture/operational/context.sysml +2 -4
  83. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +4 -4
  84. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +7 -7
  85. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +8 -8
  86. package/examples/nested-architecture-dsm/model/{catalog → methodology}/project.sysml +4 -5
  87. package/examples/reusable-instrument/memo.package.yaml +3 -1
  88. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -7
  89. package/examples/reusable-instrument/model/{catalog → methodology}/project.sysml +4 -5
  90. package/examples/robot-cell-family/README.md +34 -0
  91. package/examples/robot-cell-family/memo.identity.yaml +142 -0
  92. package/examples/robot-cell-family/memo.package.yaml +7 -0
  93. package/examples/robot-cell-family/model/methodology/project.sysml +30 -0
  94. package/examples/robot-cell-family/model/shared/shared.sysml +53 -0
  95. package/examples/robot-cell-family/model/sos/chains.sysml +36 -0
  96. package/examples/robot-cell-family/model/sos/icds.sysml +29 -0
  97. package/examples/robot-cell-family/model/sos/sos.sysml +31 -0
  98. package/examples/robot-cell-family/model/sos/use_cases.sysml +25 -0
  99. package/examples/robot-cell-family/model/systems/manipulation/manipulation_system.sysml +35 -0
  100. package/examples/robot-cell-family/model/systems/navigation/navigation_system.sysml +46 -0
  101. package/examples/robot-cell-family/model/systems/perception/perception_system.sysml +37 -0
  102. package/examples/robot-platform/memo.package.yaml +3 -0
  103. package/examples/robot-platform/model/platform.sysml +15 -0
  104. package/examples/ros-mobile-robot/README.md +5 -4
  105. package/examples/ros-mobile-robot/memo.identity.yaml +94 -0
  106. package/examples/ros-mobile-robot/memo.package.yaml +3 -1
  107. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +26 -29
  108. package/examples/ros-mobile-robot/model/{catalog → methodology}/project.sysml +8 -14
  109. package/examples/software-only-medical-device/memo.package.yaml +3 -1
  110. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +9 -10
  111. package/examples/software-only-medical-device/model/{catalog → methodology}/project.sysml +8 -9
  112. package/examples/surgical-closure-workflow/memo.package.yaml +3 -1
  113. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +23 -26
  114. package/examples/surgical-closure-workflow/model/{catalog → methodology}/project.sysml +7 -5
  115. package/examples/surgical-robot/memo.package.yaml +3 -1
  116. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +14 -12
  117. package/examples/surgical-robot/model/{catalog → methodology}/project.sysml +4 -5
  118. package/examples/sysml-diagram-samples/README.md +1 -0
  119. package/examples/sysml-diagram-samples/memo.identity.yaml +675 -0
  120. package/examples/sysml-diagram-samples/memo.package.yaml +3 -1
  121. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +10 -20
  122. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +7 -29
  123. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml +12 -36
  124. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +13 -25
  125. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/diagram_samples.sysml +388 -0
  126. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/drill_down_view.sysml +88 -0
  127. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +27 -36
  128. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml +8 -21
  129. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +17 -65
  130. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +23 -32
  131. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml +9 -22
  132. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +7 -22
  133. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml +18 -34
  134. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +2 -9
  135. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +18 -42
  136. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +11 -24
  137. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +9 -36
  138. package/examples/sysml-diagram-samples/model/methodology/project.sysml +40 -0
  139. package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +1 -1
  140. package/examples/temperature-alarm/memo.identity.yaml +6 -0
  141. package/examples/temperature-alarm/memo.package.yaml +3 -1
  142. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +43 -21
  143. package/examples/temperature-alarm/model/{catalog → methodology}/project.sysml +4 -5
  144. package/examples/ui-screen-regions/memo.identity.yaml +33 -0
  145. package/examples/ui-screen-regions/memo.package.yaml +3 -1
  146. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +12 -12
  147. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +18 -18
  148. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +6 -6
  149. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +3 -3
  150. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +1 -1
  151. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +1 -1
  152. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +10 -10
  153. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +1 -1
  154. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +12 -12
  155. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +15 -15
  156. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +6 -6
  157. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +1 -2
  158. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +1 -2
  159. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +1 -2
  160. package/examples/ui-screen-regions/model/{catalog → methodology}/project.sysml +4 -5
  161. package/extensions/README.md +65 -16
  162. package/extensions/aadl/memo.package.yaml +1 -1
  163. package/extensions/aadl/src/aadl_extension.sysml +5 -2
  164. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +29 -50
  165. package/extensions/clinical/memo.package.yaml +1 -1
  166. package/extensions/clinical/src/clinical_extension.sysml +2 -0
  167. package/extensions/cloud/memo.package.yaml +1 -1
  168. package/extensions/container/memo.package.yaml +1 -1
  169. package/extensions/messaging/memo.package.yaml +1 -1
  170. package/extensions/messaging/src/messaging_extension.sysml +2 -2
  171. package/extensions/ros/memo.package.yaml +1 -1
  172. package/extensions/ros/src/ros_extension.sysml +25 -24
  173. package/extensions/template/memo.package.yaml +1 -1
  174. package/extensions/template/model/extension.sysml +25 -0
  175. package/memo.manifest.yaml +1 -7
  176. package/methodologies/default/memo.package.yaml +1 -1
  177. package/methodologies/gpca/memo.package.yaml +1 -1
  178. package/ontology/memo.package.yaml +1 -1
  179. package/package.json +6 -4
  180. package/profile/memo.package.yaml +1 -1
  181. package/src/architecture/decisions/memo_decisions.sysml +9 -2
  182. package/src/architecture/functional/behavior/memo_behavior.sysml +27 -7
  183. package/src/architecture/functional/functions/memo_functions.sysml +45 -31
  184. package/src/architecture/functional/memo_architecture_functional.sysml +14 -0
  185. package/src/architecture/implementation/memo_architecture_implementation.sysml +21 -0
  186. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +7 -0
  187. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +58 -17
  188. package/src/architecture/implementation/ui/memo_ui.sysml +1 -1
  189. package/src/architecture/logical/interfaces/memo_interfaces.sysml +67 -58
  190. package/src/architecture/logical/memo_architecture_logical.sysml +13 -0
  191. package/src/architecture/logical/structure/memo_logical_structure.sysml +27 -8
  192. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +4 -1
  193. package/src/architecture/operational/memo_architecture_operational.sysml +19 -0
  194. package/src/architecture/operational/scenarios/memo_scenarios.sysml +9 -8
  195. package/src/architecture/operational/structure/memo_operational.sysml +5 -2
  196. package/src/architecture/operational/use_cases/memo_use_cases.sysml +16 -8
  197. package/src/architecture/realization/deployment/memo_deployment.sysml +30 -10
  198. package/src/architecture/realization/memo_architecture_realization.sysml +13 -0
  199. package/src/architecture/realization/physical/memo_physical_architecture.sysml +61 -0
  200. package/src/architecture/variability/memo_variability.sysml +87 -0
  201. package/src/artifacts/configuration_management/memo_configuration_management.sysml +95 -3
  202. package/src/artifacts/core/memo_controlled_artifacts.sysml +4 -2
  203. package/src/artifacts/standards/cfr_21_820.sysml +12 -24
  204. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +13 -20
  205. package/src/artifacts/standards/iec_60601_1.sysml +16 -32
  206. package/src/artifacts/standards/iec_60601_1_2.sysml +5 -10
  207. package/src/artifacts/standards/iec_60812.sysml +4 -8
  208. package/src/artifacts/standards/iec_62304.sysml +607 -47
  209. package/src/artifacts/standards/iec_62366_1.sysml +12 -24
  210. package/src/artifacts/standards/iec_81001_5_1.sysml +8 -16
  211. package/src/artifacts/standards/iso_13485.sysml +12 -24
  212. package/src/artifacts/standards/iso_14971.sysml +118 -20
  213. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +3 -6
  214. package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +14 -4
  215. package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +1 -2
  216. package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +1 -2
  217. package/src/artifacts/templates/dhf/iec-62304/sad.md +1 -2
  218. package/src/artifacts/templates/dhf/iec-62304/sbom.md +1 -2
  219. package/src/artifacts/templates/dhf/iec-62304/sdp.md +1 -2
  220. package/src/artifacts/templates/dhf/iec-62304/soup.md +3 -5
  221. package/src/artifacts/templates/dhf/system/sad.md +1 -1
  222. package/src/artifacts/templates/dhf/system/standards-checklist.md +2 -2
  223. package/src/artifacts/templates/dhf/system/standards-traceability.md +1 -1
  224. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +339 -13
  225. package/src/assurance/human_factors/memo_human_factors.sysml +6 -2
  226. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +7 -3
  227. package/src/assurance/safety_risk/memo_risk.sysml +39 -1
  228. package/src/core/common/memo_common.sysml +51 -68
  229. package/src/core/enumerations/memo_enumerations.sysml +93 -9
  230. package/src/core/relationships/memo_relationships.sysml +17 -11
  231. package/src/core/relationships/memo_workspace_membership.sysml +284 -0
  232. package/src/core/semantics/semantics.sysml +58 -0
  233. package/src/core/terminology/terminology.sysml +7 -0
  234. package/src/memo_namespaces.sysml +6 -0
  235. package/src/methodology/archetypes/memo_archetypes.sysml +8 -16
  236. package/src/methodology/core/memo_core.sysml +85 -29
  237. package/src/methodology/profiles/memo_profiles.sysml +217 -61
  238. package/src/methodology/workflow/memo_workflow.sysml +28 -0
  239. package/src/rules/closure/closure_rules.sysml +250 -4
  240. package/src/rules/crosslayer/cross_layer_rules.sysml +11 -0
  241. package/src/rules/ontology/ontology_invariants.sysml +288 -48
  242. package/src/rules/quantitative/quantitative_rules.sysml +4 -0
  243. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +28 -28
  244. package/src/viewpoints/clinical/clinical_viewpoint.sysml +4 -5
  245. package/src/viewpoints/context/context_viewpoint.sysml +4 -5
  246. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +3 -5
  247. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -5
  248. package/src/viewpoints/definitions/memo_view_layout.sysml +150 -0
  249. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +3 -5
  250. package/src/viewpoints/functional/functional_viewpoint.sysml +4 -5
  251. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +2 -4
  252. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +2 -4
  253. package/src/viewpoints/logical/logical_viewpoint.sysml +4 -5
  254. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +2 -4
  255. package/src/viewpoints/operational/operational_viewpoint.sysml +4 -5
  256. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +3 -5
  257. package/src/viewpoints/physical/physical_viewpoint.sysml +4 -5
  258. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +2 -4
  259. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +2 -4
  260. package/src/viewpoints/rendering/memo_rendering.sysml +50 -98
  261. package/src/viewpoints/requirements/requirements_viewpoint.sysml +4 -5
  262. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +2 -4
  263. package/src/viewpoints/risk/risk_viewpoint.sysml +4 -5
  264. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +2 -4
  265. package/src/viewpoints/software/software_viewpoint.sysml +4 -5
  266. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +3 -5
  267. package/src/viewpoints/{definitions → stakeholders_concerns}/memo_stakeholders_concerns.sysml +45 -36
  268. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +4 -5
  269. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +1 -1
  270. package/src/viewpoints/usability/usability_viewpoint.sysml +4 -5
  271. package/src/viewpoints/verification/verification_viewpoint.sysml +4 -5
  272. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +2 -4
  273. package/stage1/syside-67f92dc96ba75cd05b5c8d13.ids.gz +0 -0
  274. package/stage1/syside-67f92dc96ba75cd05b5c8d13.json.gz +0 -0
  275. package/templates/default/memo.package.yaml +6 -1
  276. package/templates/default/model/catalog/architecture/system.sysml +7 -3
  277. package/templates/default/model/{catalog → methodology}/project.sysml +3 -4
  278. package/examples/sysml-diagram-samples/model/catalog/project.sysml +0 -26
  279. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +0 -47
  280. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +0 -94
  281. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +0 -13
  282. package/examples/ui-screen-regions/model/catalog/relationships.sysml +0 -8
  283. package/extensions/aadl/src/methodology/aadl_methodology.sysml +0 -19
  284. package/extensions/clinical/src/methodology/clinical_methodology.sysml +0 -24
  285. package/extensions/cloud/src/methodology/cloud_methodology.sysml +0 -19
  286. package/extensions/container/src/methodology/container_methodology.sysml +0 -19
  287. package/extensions/messaging/src/methodology/messaging_methodology.sysml +0 -19
  288. package/extensions/ros/src/methodology/ros_methodology.sysml +0 -27
  289. package/extensions/template/src/extension.sysml +0 -39
  290. package/templates/connected-device/memo.package.yaml +0 -13
  291. package/templates/connected-device/model/catalog/architecture/system.sysml +0 -5
  292. package/templates/connected-device/model/catalog/artifacts/catalog.sysml +0 -5
  293. package/templates/connected-device/model/catalog/assurance/requirements.sysml +0 -7
  294. package/templates/connected-device/model/catalog/project.sysml +0 -30
  295. package/templates/connected-device/package.json +0 -8
  296. package/templates/connected-device/syside.toml +0 -13
  297. package/templates/infusion-pump/memo.package.yaml +0 -13
  298. package/templates/infusion-pump/model/catalog/architecture/system.sysml +0 -5
  299. package/templates/infusion-pump/model/catalog/artifacts/catalog.sysml +0 -5
  300. package/templates/infusion-pump/model/catalog/assurance/requirements.sysml +0 -7
  301. package/templates/infusion-pump/model/catalog/project.sysml +0 -30
  302. package/templates/infusion-pump/package.json +0 -8
  303. package/templates/infusion-pump/syside.toml +0 -13
  304. package/templates/monitoring-device/memo.package.yaml +0 -13
  305. package/templates/monitoring-device/model/catalog/architecture/system.sysml +0 -5
  306. package/templates/monitoring-device/model/catalog/artifacts/catalog.sysml +0 -5
  307. package/templates/monitoring-device/model/catalog/assurance/requirements.sysml +0 -7
  308. package/templates/monitoring-device/model/catalog/project.sysml +0 -30
  309. package/templates/monitoring-device/package.json +0 -8
  310. package/templates/monitoring-device/syside.toml +0 -13
  311. package/templates/samd/memo.package.yaml +0 -13
  312. package/templates/samd/model/catalog/architecture/system.sysml +0 -5
  313. package/templates/samd/model/catalog/artifacts/catalog.sysml +0 -5
  314. package/templates/samd/model/catalog/assurance/requirements.sysml +0 -7
  315. package/templates/samd/model/catalog/project.sysml +0 -30
  316. package/templates/samd/package.json +0 -8
  317. package/templates/samd/syside.toml +0 -13
@@ -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
@@ -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
+ }