@memoarchitect/ontology 0.12.1 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/README.md +5 -3
  2. package/examples/connected-patient-monitor/memo.identity.yaml +34 -0
  3. package/examples/connected-patient-monitor/memo.package.yaml +3 -1
  4. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +17 -12
  5. package/examples/connected-patient-monitor/model/{catalog → methodology}/project.sysml +4 -5
  6. package/examples/embedded-infusion-pump/memo.package.yaml +3 -1
  7. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +6 -6
  8. package/examples/embedded-infusion-pump/model/{catalog → methodology}/project.sysml +4 -5
  9. package/examples/functional-logical-physical/memo.identity.yaml +28 -0
  10. package/examples/functional-logical-physical/memo.package.yaml +3 -1
  11. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +5 -5
  12. package/examples/functional-logical-physical/model/{catalog → methodology}/project.sysml +4 -5
  13. package/examples/gpca-pump/analysis/Samples/01-model-overview.ipynb +40 -139
  14. package/examples/gpca-pump/analysis/Samples/02-architecture-hotspots.ipynb +38 -290
  15. package/examples/gpca-pump/analysis/Samples/03-model-quality.ipynb +47 -217
  16. package/examples/gpca-pump/analysis/Samples/04-change-impact-explorer.ipynb +50 -191
  17. package/examples/gpca-pump/analysis/Samples/05-model-charts.ipynb +42 -181
  18. package/examples/gpca-pump/analysis/Samples/06-ownership-graph.ipynb +40 -164
  19. package/examples/gpca-pump/analysis/Samples/07-model-inventory-table.ipynb +51 -172
  20. package/examples/gpca-pump/analysis/Samples/README.md +15 -9
  21. package/examples/gpca-pump/analysis/memo_model.py +243 -0
  22. package/examples/gpca-pump/memo.identity.yaml +521 -26
  23. package/examples/gpca-pump/memo.package.yaml +3 -1
  24. package/examples/gpca-pump/methodology/gpca_profiles.sysml +56 -47
  25. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +51 -78
  26. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +359 -358
  27. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +9 -9
  28. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +56 -69
  29. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +44 -59
  30. package/examples/gpca-pump/model/catalog/gpca_context.sysml +23 -35
  31. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +33 -40
  32. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +62 -63
  33. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +362 -483
  34. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +45 -70
  35. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +6 -12
  36. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +173 -169
  37. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +139 -225
  38. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +43 -47
  39. package/examples/gpca-pump/model/catalog/gpca_system.sysml +68 -65
  40. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +147 -116
  41. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +65 -91
  42. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +4 -6
  43. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +4 -6
  44. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +4 -6
  45. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +4 -6
  46. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +2 -4
  47. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +7 -6
  48. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +4 -6
  49. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +4 -6
  50. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +3 -5
  51. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +4 -6
  52. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +4 -6
  53. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +3 -5
  54. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +3 -5
  55. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +4 -6
  56. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +2 -4
  57. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +3 -5
  58. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +2 -4
  59. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +4 -6
  60. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +4 -6
  61. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +2 -4
  62. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +4 -6
  63. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +4 -6
  64. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +3 -5
  65. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +4 -6
  66. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +3 -5
  67. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +2 -4
  68. package/examples/gpca-pump/model/{catalog → methodology}/project.sysml +8 -6
  69. package/examples/ivd-laboratory-system/memo.package.yaml +3 -1
  70. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +12 -9
  71. package/examples/ivd-laboratory-system/model/{catalog → methodology}/project.sysml +4 -5
  72. package/examples/manual-surgical-instrument/memo.package.yaml +3 -1
  73. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +2 -6
  74. package/examples/manual-surgical-instrument/model/{catalog → methodology}/project.sysml +4 -5
  75. package/examples/multidimensional-layers/memo.package.yaml +3 -1
  76. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +2 -4
  77. package/examples/multidimensional-layers/model/{catalog → methodology}/project.sysml +4 -5
  78. package/examples/nested-architecture-dsm/memo.identity.yaml +93 -0
  79. package/examples/nested-architecture-dsm/memo.package.yaml +3 -1
  80. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +30 -30
  81. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +28 -28
  82. package/examples/nested-architecture-dsm/model/catalog/architecture/operational/context.sysml +2 -4
  83. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +4 -4
  84. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +7 -7
  85. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +8 -8
  86. package/examples/nested-architecture-dsm/model/{catalog → methodology}/project.sysml +4 -5
  87. package/examples/reusable-instrument/memo.package.yaml +3 -1
  88. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -7
  89. package/examples/reusable-instrument/model/{catalog → methodology}/project.sysml +4 -5
  90. package/examples/robot-cell-family/README.md +34 -0
  91. package/examples/robot-cell-family/memo.identity.yaml +142 -0
  92. package/examples/robot-cell-family/memo.package.yaml +7 -0
  93. package/examples/robot-cell-family/model/methodology/project.sysml +30 -0
  94. package/examples/robot-cell-family/model/shared/shared.sysml +53 -0
  95. package/examples/robot-cell-family/model/sos/chains.sysml +36 -0
  96. package/examples/robot-cell-family/model/sos/icds.sysml +29 -0
  97. package/examples/robot-cell-family/model/sos/sos.sysml +31 -0
  98. package/examples/robot-cell-family/model/sos/use_cases.sysml +25 -0
  99. package/examples/robot-cell-family/model/systems/manipulation/manipulation_system.sysml +35 -0
  100. package/examples/robot-cell-family/model/systems/navigation/navigation_system.sysml +46 -0
  101. package/examples/robot-cell-family/model/systems/perception/perception_system.sysml +37 -0
  102. package/examples/robot-platform/memo.package.yaml +3 -0
  103. package/examples/robot-platform/model/platform.sysml +15 -0
  104. package/examples/ros-mobile-robot/README.md +5 -4
  105. package/examples/ros-mobile-robot/memo.identity.yaml +94 -0
  106. package/examples/ros-mobile-robot/memo.package.yaml +3 -1
  107. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +26 -29
  108. package/examples/ros-mobile-robot/model/{catalog → methodology}/project.sysml +8 -14
  109. package/examples/software-only-medical-device/memo.package.yaml +3 -1
  110. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +9 -10
  111. package/examples/software-only-medical-device/model/{catalog → methodology}/project.sysml +8 -9
  112. package/examples/surgical-closure-workflow/memo.package.yaml +3 -1
  113. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +23 -26
  114. package/examples/surgical-closure-workflow/model/{catalog → methodology}/project.sysml +7 -5
  115. package/examples/surgical-robot/memo.package.yaml +3 -1
  116. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +14 -12
  117. package/examples/surgical-robot/model/{catalog → methodology}/project.sysml +4 -5
  118. package/examples/sysml-diagram-samples/README.md +1 -0
  119. package/examples/sysml-diagram-samples/memo.identity.yaml +675 -0
  120. package/examples/sysml-diagram-samples/memo.package.yaml +3 -1
  121. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +10 -20
  122. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +7 -29
  123. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml +12 -36
  124. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +13 -25
  125. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/diagram_samples.sysml +388 -0
  126. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/drill_down_view.sysml +88 -0
  127. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +27 -36
  128. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml +8 -21
  129. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +17 -65
  130. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +23 -32
  131. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml +9 -22
  132. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +7 -22
  133. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml +18 -34
  134. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +2 -9
  135. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +18 -42
  136. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +11 -24
  137. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +9 -36
  138. package/examples/sysml-diagram-samples/model/methodology/project.sysml +40 -0
  139. package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +1 -1
  140. package/examples/temperature-alarm/memo.identity.yaml +6 -0
  141. package/examples/temperature-alarm/memo.package.yaml +3 -1
  142. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +43 -21
  143. package/examples/temperature-alarm/model/{catalog → methodology}/project.sysml +4 -5
  144. package/examples/ui-screen-regions/memo.identity.yaml +33 -0
  145. package/examples/ui-screen-regions/memo.package.yaml +3 -1
  146. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +12 -12
  147. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +18 -18
  148. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +6 -6
  149. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +3 -3
  150. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +1 -1
  151. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +1 -1
  152. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +10 -10
  153. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +1 -1
  154. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +12 -12
  155. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +15 -15
  156. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +6 -6
  157. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +1 -2
  158. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +1 -2
  159. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +1 -2
  160. package/examples/ui-screen-regions/model/{catalog → methodology}/project.sysml +4 -5
  161. package/extensions/README.md +65 -16
  162. package/extensions/aadl/memo.package.yaml +1 -1
  163. package/extensions/aadl/src/aadl_extension.sysml +5 -2
  164. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +29 -50
  165. package/extensions/clinical/memo.package.yaml +1 -1
  166. package/extensions/clinical/src/clinical_extension.sysml +2 -0
  167. package/extensions/cloud/memo.package.yaml +1 -1
  168. package/extensions/container/memo.package.yaml +1 -1
  169. package/extensions/messaging/memo.package.yaml +1 -1
  170. package/extensions/messaging/src/messaging_extension.sysml +2 -2
  171. package/extensions/ros/memo.package.yaml +1 -1
  172. package/extensions/ros/src/ros_extension.sysml +25 -24
  173. package/extensions/template/memo.package.yaml +1 -1
  174. package/extensions/template/model/extension.sysml +25 -0
  175. package/memo.manifest.yaml +1 -7
  176. package/methodologies/default/memo.package.yaml +1 -1
  177. package/methodologies/gpca/memo.package.yaml +1 -1
  178. package/ontology/memo.package.yaml +1 -1
  179. package/package.json +6 -4
  180. package/profile/memo.package.yaml +1 -1
  181. package/src/architecture/decisions/memo_decisions.sysml +9 -2
  182. package/src/architecture/functional/behavior/memo_behavior.sysml +27 -7
  183. package/src/architecture/functional/functions/memo_functions.sysml +45 -31
  184. package/src/architecture/functional/memo_architecture_functional.sysml +14 -0
  185. package/src/architecture/implementation/memo_architecture_implementation.sysml +21 -0
  186. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +7 -0
  187. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +58 -17
  188. package/src/architecture/implementation/ui/memo_ui.sysml +1 -1
  189. package/src/architecture/logical/interfaces/memo_interfaces.sysml +67 -58
  190. package/src/architecture/logical/memo_architecture_logical.sysml +13 -0
  191. package/src/architecture/logical/structure/memo_logical_structure.sysml +27 -8
  192. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +4 -1
  193. package/src/architecture/operational/memo_architecture_operational.sysml +19 -0
  194. package/src/architecture/operational/scenarios/memo_scenarios.sysml +9 -8
  195. package/src/architecture/operational/structure/memo_operational.sysml +5 -2
  196. package/src/architecture/operational/use_cases/memo_use_cases.sysml +16 -8
  197. package/src/architecture/realization/deployment/memo_deployment.sysml +30 -10
  198. package/src/architecture/realization/memo_architecture_realization.sysml +13 -0
  199. package/src/architecture/realization/physical/memo_physical_architecture.sysml +61 -0
  200. package/src/architecture/variability/memo_variability.sysml +87 -0
  201. package/src/artifacts/configuration_management/memo_configuration_management.sysml +95 -3
  202. package/src/artifacts/core/memo_controlled_artifacts.sysml +4 -2
  203. package/src/artifacts/standards/cfr_21_820.sysml +12 -24
  204. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +13 -20
  205. package/src/artifacts/standards/iec_60601_1.sysml +16 -32
  206. package/src/artifacts/standards/iec_60601_1_2.sysml +5 -10
  207. package/src/artifacts/standards/iec_60812.sysml +4 -8
  208. package/src/artifacts/standards/iec_62304.sysml +607 -47
  209. package/src/artifacts/standards/iec_62366_1.sysml +12 -24
  210. package/src/artifacts/standards/iec_81001_5_1.sysml +8 -16
  211. package/src/artifacts/standards/iso_13485.sysml +12 -24
  212. package/src/artifacts/standards/iso_14971.sysml +118 -20
  213. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +3 -6
  214. package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +14 -4
  215. package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +1 -2
  216. package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +1 -2
  217. package/src/artifacts/templates/dhf/iec-62304/sad.md +1 -2
  218. package/src/artifacts/templates/dhf/iec-62304/sbom.md +1 -2
  219. package/src/artifacts/templates/dhf/iec-62304/sdp.md +1 -2
  220. package/src/artifacts/templates/dhf/iec-62304/soup.md +3 -5
  221. package/src/artifacts/templates/dhf/system/sad.md +1 -1
  222. package/src/artifacts/templates/dhf/system/standards-checklist.md +2 -2
  223. package/src/artifacts/templates/dhf/system/standards-traceability.md +1 -1
  224. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +339 -13
  225. package/src/assurance/human_factors/memo_human_factors.sysml +6 -2
  226. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +7 -3
  227. package/src/assurance/safety_risk/memo_risk.sysml +39 -1
  228. package/src/core/common/memo_common.sysml +51 -68
  229. package/src/core/enumerations/memo_enumerations.sysml +93 -9
  230. package/src/core/relationships/memo_relationships.sysml +17 -11
  231. package/src/core/relationships/memo_workspace_membership.sysml +284 -0
  232. package/src/core/semantics/semantics.sysml +58 -0
  233. package/src/core/terminology/terminology.sysml +7 -0
  234. package/src/memo_namespaces.sysml +6 -0
  235. package/src/methodology/archetypes/memo_archetypes.sysml +8 -16
  236. package/src/methodology/core/memo_core.sysml +85 -29
  237. package/src/methodology/profiles/memo_profiles.sysml +217 -61
  238. package/src/methodology/workflow/memo_workflow.sysml +28 -0
  239. package/src/rules/closure/closure_rules.sysml +250 -4
  240. package/src/rules/crosslayer/cross_layer_rules.sysml +11 -0
  241. package/src/rules/ontology/ontology_invariants.sysml +288 -48
  242. package/src/rules/quantitative/quantitative_rules.sysml +4 -0
  243. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +28 -28
  244. package/src/viewpoints/clinical/clinical_viewpoint.sysml +4 -5
  245. package/src/viewpoints/context/context_viewpoint.sysml +4 -5
  246. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +3 -5
  247. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -5
  248. package/src/viewpoints/definitions/memo_view_layout.sysml +150 -0
  249. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +3 -5
  250. package/src/viewpoints/functional/functional_viewpoint.sysml +4 -5
  251. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +2 -4
  252. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +2 -4
  253. package/src/viewpoints/logical/logical_viewpoint.sysml +4 -5
  254. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +2 -4
  255. package/src/viewpoints/operational/operational_viewpoint.sysml +4 -5
  256. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +3 -5
  257. package/src/viewpoints/physical/physical_viewpoint.sysml +4 -5
  258. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +2 -4
  259. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +2 -4
  260. package/src/viewpoints/rendering/memo_rendering.sysml +50 -98
  261. package/src/viewpoints/requirements/requirements_viewpoint.sysml +4 -5
  262. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +2 -4
  263. package/src/viewpoints/risk/risk_viewpoint.sysml +4 -5
  264. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +2 -4
  265. package/src/viewpoints/software/software_viewpoint.sysml +4 -5
  266. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +3 -5
  267. package/src/viewpoints/{definitions → stakeholders_concerns}/memo_stakeholders_concerns.sysml +45 -36
  268. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +4 -5
  269. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +1 -1
  270. package/src/viewpoints/usability/usability_viewpoint.sysml +4 -5
  271. package/src/viewpoints/verification/verification_viewpoint.sysml +4 -5
  272. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +2 -4
  273. package/stage1/syside-67f92dc96ba75cd05b5c8d13.ids.gz +0 -0
  274. package/stage1/syside-67f92dc96ba75cd05b5c8d13.json.gz +0 -0
  275. package/templates/default/memo.package.yaml +6 -1
  276. package/templates/default/model/catalog/architecture/system.sysml +7 -3
  277. package/templates/default/model/{catalog → methodology}/project.sysml +3 -4
  278. package/examples/sysml-diagram-samples/model/catalog/project.sysml +0 -26
  279. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +0 -47
  280. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +0 -94
  281. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +0 -13
  282. package/examples/ui-screen-regions/model/catalog/relationships.sysml +0 -8
  283. package/extensions/aadl/src/methodology/aadl_methodology.sysml +0 -19
  284. package/extensions/clinical/src/methodology/clinical_methodology.sysml +0 -24
  285. package/extensions/cloud/src/methodology/cloud_methodology.sysml +0 -19
  286. package/extensions/container/src/methodology/container_methodology.sysml +0 -19
  287. package/extensions/messaging/src/methodology/messaging_methodology.sysml +0 -19
  288. package/extensions/ros/src/methodology/ros_methodology.sysml +0 -27
  289. package/extensions/template/src/extension.sysml +0 -39
  290. package/templates/connected-device/memo.package.yaml +0 -13
  291. package/templates/connected-device/model/catalog/architecture/system.sysml +0 -5
  292. package/templates/connected-device/model/catalog/artifacts/catalog.sysml +0 -5
  293. package/templates/connected-device/model/catalog/assurance/requirements.sysml +0 -7
  294. package/templates/connected-device/model/catalog/project.sysml +0 -30
  295. package/templates/connected-device/package.json +0 -8
  296. package/templates/connected-device/syside.toml +0 -13
  297. package/templates/infusion-pump/memo.package.yaml +0 -13
  298. package/templates/infusion-pump/model/catalog/architecture/system.sysml +0 -5
  299. package/templates/infusion-pump/model/catalog/artifacts/catalog.sysml +0 -5
  300. package/templates/infusion-pump/model/catalog/assurance/requirements.sysml +0 -7
  301. package/templates/infusion-pump/model/catalog/project.sysml +0 -30
  302. package/templates/infusion-pump/package.json +0 -8
  303. package/templates/infusion-pump/syside.toml +0 -13
  304. package/templates/monitoring-device/memo.package.yaml +0 -13
  305. package/templates/monitoring-device/model/catalog/architecture/system.sysml +0 -5
  306. package/templates/monitoring-device/model/catalog/artifacts/catalog.sysml +0 -5
  307. package/templates/monitoring-device/model/catalog/assurance/requirements.sysml +0 -7
  308. package/templates/monitoring-device/model/catalog/project.sysml +0 -30
  309. package/templates/monitoring-device/package.json +0 -8
  310. package/templates/monitoring-device/syside.toml +0 -13
  311. package/templates/samd/memo.package.yaml +0 -13
  312. package/templates/samd/model/catalog/architecture/system.sysml +0 -5
  313. package/templates/samd/model/catalog/artifacts/catalog.sysml +0 -5
  314. package/templates/samd/model/catalog/assurance/requirements.sysml +0 -7
  315. package/templates/samd/model/catalog/project.sysml +0 -30
  316. package/templates/samd/package.json +0 -8
  317. package/templates/samd/syside.toml +0 -13
@@ -1,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
+ }
@@ -10,15 +10,107 @@ package memo_artifacts_configuration_management {
10
10
  attribute changeType : ChangeTypeKind;
11
11
  attribute impactAssessment : String;
12
12
  attribute approvalStatus : String;
13
- attribute affectedBaseline : String;
13
+ // The release a change affects is `#AffectsRelease dependency from <request> to <record>;`
14
+ // (below), not a string naming a baseline.
14
15
  }
15
16
 
16
17
  part def ConfigurationItem :> MemoPart {
17
- attribute version : String;
18
- attribute baseline : String;
18
+ // No version and no baseline: both belong to a release of the item, not to the item
19
+ // (plan O2). A `ReleaseRecord` whose `#ReleaseOf` is this item carries them.
19
20
  attribute controlLevel : String;
20
21
  }
21
22
 
23
+ // A release record is one release of one item: rev D and rev E of a part, or its EU and its US
24
+ // release, are separate records, each with its own part number and revision (plan O2). The
25
+ // definition of the item is held once and carries no revision. The record is an element with a
26
+ // status (inherited from MemoPart: proposed, draft, ... released), so a release moves through
27
+ // the lifecycle the way any element does.
28
+ //
29
+ // part relPumpD : ReleaseRecord {
30
+ // :>> partNumber = "PN-1001"; :>> revision = "D"; :>> modelCommit = "9f2c...";
31
+ // }
32
+ // #ReleaseOf dependency from relPumpD to PumpSystem;
33
+ //
34
+ // `softwareVersion` and `codeTag` are for an item that is software; a record of anything else
35
+ // leaves them out. The links are typed dependencies, because a record's item is a definition and
36
+ // a `ref` cannot point at one: a Dependency's client and supplier are any element
37
+ // (SysML-textual-bnf.kebnf:51-59), and the metadata prefix names the kind (`:52`).
38
+ //
39
+ // A release of a system of systems is the same record with a system of systems for its item. It
40
+ // `#Contains` the records of the system releases it pins, and is the validated configuration:
41
+ // `#VerifiedByCase` names the verification cases that validated it.
42
+ part def ReleaseRecord :> MemoPart {
43
+ attribute partNumber : String[1];
44
+ attribute revision : String[1];
45
+ attribute softwareVersion : String[0..1];
46
+ attribute codeTag : String[0..1];
47
+ // The commit of the model this release was built from. A record cannot hold the hash of the
48
+ // commit that adds it, so it is written after the commit it pins and is always found in a
49
+ // folder that is not itself pinned (`sos/`).
50
+ attribute modelCommit : String[1];
51
+ }
52
+
53
+ metadata def ReleaseOf :> MemoTypedDependency {
54
+ doc /* `#ReleaseOf dependency from <record> to <item definition>;` The record is a release of this item. One record, one item. */
55
+ }
56
+ metadata def Contains :> MemoTypedDependency {
57
+ doc /* `#Contains dependency from <record> to <record>, <record>;` The release pins these releases: a system of systems version its systems, a system release its components. */
58
+ }
59
+ metadata def Implements :> MemoTypedDependency {
60
+ doc /* `#Implements dependency from <record> to <interface record>;` The release implements this revision of an interface. */
61
+ }
62
+ metadata def VerifiedByCase :> MemoTypedDependency {
63
+ doc /* `#VerifiedByCase dependency from <record> to <verification case>;` The case that verified, or for a system of systems version validated, this release. `verifiedBy` is taken by the native relation from a requirement to its case. */
64
+ }
65
+ metadata def AffectsRelease :> MemoTypedDependency {
66
+ doc /* `#AffectsRelease dependency from <change request> to <record>;` The release a change request is raised against. */
67
+ }
68
+
69
+ // A regulated device is one approval in one jurisdiction (plan O6): the thing a regulator is asked to
70
+ // clear. It is not an item and not a release: it COVERS the system releases the approval names, so two
71
+ // markets can ship different releases of one system, each with its own design history and risk file.
72
+ //
73
+ // part deviceFda : RegulatedDevice {
74
+ // attribute :>> jurisdiction = RegulatoryRegimeKind::FDA_510k;
75
+ // attribute :>> submissionId = "K123456";
76
+ // }
77
+ // #Covers dependency from deviceFda to relPumpD;
78
+ //
79
+ // The jurisdiction is a `RegulatoryRegimeKind`, the same enum the standards library and the document
80
+ // templates (`required_for`) are written against, so a device selects the standards it must meet and the
81
+ // documents it must have. It replaces `ModelMethodBinding.regulatoryRegime`, which stated one regime set
82
+ // for a whole model and is read only when the model declares no device.
83
+ //
84
+ // `IntendedUseOf` and `UsedWith` (plan O6) are not declared: the plan names no end for either, and an end
85
+ // is not invented to fill a name. `Covers` is the link every part of M5 needs.
86
+ part def RegulatedDevice :> MemoPart {
87
+ attribute jurisdiction : RegulatoryRegimeKind[1];
88
+ attribute submissionId : String[0..1];
89
+ }
90
+
91
+ metadata def Covers :> MemoTypedDependency {
92
+ doc /* `#Covers dependency from <device>, to <record>, <record>;` The approval covers these system releases. */
93
+ }
94
+
95
+ // A project is a change set in an iteration (plan O7): the work that produces releases. It holds a link to
96
+ // where the work is tracked and nothing else; the merge request is the approval. It FEEDS the release records
97
+ // it contributes to, and a variant records the project that introduced it, so "which work gave us this
98
+ // option, and which releases did it reach" is two links.
99
+ //
100
+ // part prjIrrigatedTip : Project { attribute :>> trackerLink = "https://tracker.example/PRJ-12"; }
101
+ // #Feeds dependency from prjIrrigatedTip to relGeneratorEu, relGeneratorUs;
102
+ // #IntroducedBy dependency from outputStage::usOutput to prjIrrigatedTip;
103
+ part def Project :> MemoPart {
104
+ attribute trackerLink : String[0..1];
105
+ }
106
+
107
+ metadata def Feeds :> MemoTypedDependency {
108
+ doc /* `#Feeds dependency from <project> to <record>, <record>;` The project's work is in these releases. */
109
+ }
110
+ metadata def IntroducedBy :> MemoTypedDependency {
111
+ doc /* `#IntroducedBy dependency from <variant> to <project>;` The project that introduced this variant. */
112
+ }
113
+
22
114
  // ── Relations owned by this package ─────────────────────────────
23
115
  // Moved out of memo_core_relationships: their ends are typed against
24
116
  // types declared here, and core must not depend on a domain package.
@@ -4,9 +4,11 @@ package memo_artifacts_core {
4
4
  private import memo_core_common::*;
5
5
  private import memo_core_enumerations::*;
6
6
 
7
- abstract item def MemoArtifactItem :> MemoItem;
7
+ // An artifact is a part: a document, a standard, a clause of one. A
8
+ // relationship end typed MemoArtifact (TracesToDocument) takes all of them.
9
+ abstract part def MemoArtifact :> MemoPart;
8
10
 
9
- item def ControlledArtifact :> MemoArtifactItem {
11
+ part def ControlledArtifact :> MemoArtifact {
10
12
  attribute version : String;
11
13
  attribute artifactKind : ArtifactKind;
12
14
  attribute owner : String;
@@ -17,84 +17,72 @@ package memo_artifacts_standards_cfr_21_820 {
17
17
 
18
18
  private import memo_core_common::*;
19
19
  private import memo_core_common::MemoIdentity;
20
- item cfr21Part820 : RegulatoryStandard {
20
+ part cfr21Part820 : RegulatoryStandard {
21
21
  @MemoIdentity { :>> providedId = "STD-21-CFR-820"; }
22
- attribute :>> name = "CFR21Part820";
23
22
  attribute :>> designation = "21 CFR Part 820";
24
23
  attribute :>> issuer = "FDA";
25
24
  attribute :>> appliesToRegime = (RegulatoryRegimeKind::FDA_510k, RegulatoryRegimeKind::FDA_PMA);
26
- item cfr820_30 : StandardClause {
25
+ part cfr820_30 : StandardClause {
27
26
  @MemoIdentity { :>> providedId = "STD-21-CFR-820-30"; }
28
- attribute :>> name = "CFR820_30";
29
27
  attribute :>> clauseNumber = "820.30";
30
28
  attribute :>> title = "design controls";
31
29
  attribute :>> normativeStrength = "shall";
32
- item cfr820_30a : StandardClause {
30
+ part cfr820_30a : StandardClause {
33
31
  @MemoIdentity { :>> providedId = "STD-21-CFR-820-30-A"; }
34
- attribute :>> name = "CFR820_30a";
35
32
  attribute :>> clauseNumber = "820.30(a)";
36
33
  attribute :>> title = "general design control applicability";
37
34
  attribute :>> normativeStrength = "shall";
38
35
  }
39
- item cfr820_30b : StandardClause {
36
+ part cfr820_30b : StandardClause {
40
37
  @MemoIdentity { :>> providedId = "STD-21-CFR-820-30-B"; }
41
- attribute :>> name = "CFR820_30b";
42
38
  attribute :>> clauseNumber = "820.30(b)";
43
39
  attribute :>> title = "design and development planning";
44
40
  attribute :>> normativeStrength = "shall";
45
41
  }
46
- item cfr820_30c : StandardClause {
42
+ part cfr820_30c : StandardClause {
47
43
  @MemoIdentity { :>> providedId = "STD-21-CFR-820-30-C"; }
48
- attribute :>> name = "CFR820_30c";
49
44
  attribute :>> clauseNumber = "820.30(c)";
50
45
  attribute :>> title = "design input";
51
46
  attribute :>> normativeStrength = "shall";
52
47
  }
53
- item cfr820_30d : StandardClause {
48
+ part cfr820_30d : StandardClause {
54
49
  @MemoIdentity { :>> providedId = "STD-21-CFR-820-30-D"; }
55
- attribute :>> name = "CFR820_30d";
56
50
  attribute :>> clauseNumber = "820.30(d)";
57
51
  attribute :>> title = "design output";
58
52
  attribute :>> normativeStrength = "shall";
59
53
  }
60
- item cfr820_30e : StandardClause {
54
+ part cfr820_30e : StandardClause {
61
55
  @MemoIdentity { :>> providedId = "STD-21-CFR-820-30-E"; }
62
- attribute :>> name = "CFR820_30e";
63
56
  attribute :>> clauseNumber = "820.30(e)";
64
57
  attribute :>> title = "design review";
65
58
  attribute :>> normativeStrength = "shall";
66
59
  }
67
- item cfr820_30f : StandardClause {
60
+ part cfr820_30f : StandardClause {
68
61
  @MemoIdentity { :>> providedId = "STD-21-CFR-820-30-F"; }
69
- attribute :>> name = "CFR820_30f";
70
62
  attribute :>> clauseNumber = "820.30(f)";
71
63
  attribute :>> title = "design verification";
72
64
  attribute :>> normativeStrength = "shall";
73
65
  }
74
- item cfr820_30g : StandardClause {
66
+ part cfr820_30g : StandardClause {
75
67
  @MemoIdentity { :>> providedId = "STD-21-CFR-820-30-G"; }
76
- attribute :>> name = "CFR820_30g";
77
68
  attribute :>> clauseNumber = "820.30(g)";
78
69
  attribute :>> title = "design validation";
79
70
  attribute :>> normativeStrength = "shall";
80
71
  }
81
- item cfr820_30h : StandardClause {
72
+ part cfr820_30h : StandardClause {
82
73
  @MemoIdentity { :>> providedId = "STD-21-CFR-820-30-H"; }
83
- attribute :>> name = "CFR820_30h";
84
74
  attribute :>> clauseNumber = "820.30(h)";
85
75
  attribute :>> title = "design transfer";
86
76
  attribute :>> normativeStrength = "shall";
87
77
  }
88
- item cfr820_30i : StandardClause {
78
+ part cfr820_30i : StandardClause {
89
79
  @MemoIdentity { :>> providedId = "STD-21-CFR-820-30-I"; }
90
- attribute :>> name = "CFR820_30i";
91
80
  attribute :>> clauseNumber = "820.30(i)";
92
81
  attribute :>> title = "design changes";
93
82
  attribute :>> normativeStrength = "shall";
94
83
  }
95
- item cfr820_30j : StandardClause {
84
+ part cfr820_30j : StandardClause {
96
85
  @MemoIdentity { :>> providedId = "STD-21-CFR-820-30-J"; }
97
- attribute :>> name = "CFR820_30j";
98
86
  attribute :>> clauseNumber = "820.30(j)";
99
87
  attribute :>> title = "design history file";
100
88
  attribute :>> normativeStrength = "shall";
@@ -20,51 +20,44 @@ package memo_artifacts_standards_fda_cybersecurity_2023 {
20
20
 
21
21
  private import memo_core_common::*;
22
22
  private import memo_core_common::MemoIdentity;
23
- item fdaCybersecurity2023 : RegulatoryStandard {
23
+ part fdaCybersecurity2023 : RegulatoryStandard {
24
24
  @MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023"; }
25
- attribute :>> name = "FDACybersecurity2023";
26
25
  attribute :>> designation = "FDA Cybersecurity Guidance 2023";
27
26
  attribute :>> edition = "2023-09";
28
27
  attribute :>> issuer = "FDA";
29
28
  attribute :>> appliesToRegime = (RegulatoryRegimeKind::FDA_510k, RegulatoryRegimeKind::FDA_PMA);
30
- item fdaCyberSection4 : StandardClause {
31
- @MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-IV"; }
32
- attribute :>> name = "FDACyberSectionIV";
29
+ part fdaCyberSection4 : StandardClause {
30
+ @MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-IV"; :>> label = "FDACyberSectionIV"; }
33
31
  attribute :>> clauseNumber = "IV";
34
32
  attribute :>> title = "general cybersecurity principles";
35
33
  attribute :>> normativeStrength = "informative";
36
34
  }
37
- item fdaCyberSection5 : StandardClause {
38
- @MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-V"; }
39
- attribute :>> name = "FDACyberSectionV";
35
+ part fdaCyberSection5 : StandardClause {
36
+ @MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-V"; :>> label = "FDACyberSectionV"; }
40
37
  attribute :>> clauseNumber = "V";
41
38
  attribute :>> title = "secure product development framework";
42
39
  attribute :>> normativeStrength = "informative";
43
- item fdaCyberSection5A : StandardClause {
44
- @MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-V-A"; }
45
- attribute :>> name = "FDACyberSectionVA";
40
+ part fdaCyberSection5A : StandardClause {
41
+ @MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-V-A"; :>> label = "FDACyberSectionVA"; }
46
42
  attribute :>> clauseNumber = "V.A";
47
43
  attribute :>> title = "security risk management";
48
44
  attribute :>> normativeStrength = "informative";
49
45
  }
50
- item fdaCyberSection5B : StandardClause {
51
- @MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-V-B"; }
52
- attribute :>> name = "FDACyberSectionVB";
46
+ part fdaCyberSection5B : StandardClause {
47
+ @MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-V-B"; :>> label = "FDACyberSectionVB"; }
53
48
  attribute :>> clauseNumber = "V.B";
54
49
  attribute :>> title = "security architecture";
55
50
  attribute :>> normativeStrength = "informative";
56
51
  }
57
- item fdaCyberSection5C : StandardClause {
58
- @MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-V-C"; }
59
- attribute :>> name = "FDACyberSectionVC";
52
+ part fdaCyberSection5C : StandardClause {
53
+ @MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-V-C"; :>> label = "FDACyberSectionVC"; }
60
54
  attribute :>> clauseNumber = "V.C";
61
55
  attribute :>> title = "cybersecurity testing";
62
56
  attribute :>> normativeStrength = "informative";
63
57
  }
64
58
  }
65
- item fdaCyberSection6 : StandardClause {
66
- @MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-VI"; }
67
- attribute :>> name = "FDACyberSectionVI";
59
+ part fdaCyberSection6 : StandardClause {
60
+ @MemoIdentity { :>> providedId = "STD-FDA-CYBER-2023-VI"; :>> label = "FDACyberSectionVI"; }
68
61
  attribute :>> clauseNumber = "VI";
69
62
  attribute :>> title = "cybersecurity transparency and vulnerability management";
70
63
  attribute :>> normativeStrength = "informative";