@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
@@ -6,14 +6,16 @@ package memo_methodology_core {
6
6
  private import memo_core_common::*;
7
7
  private import memo_core_enumerations::*;
8
8
  private import memo_core_consistency_rules::*;
9
+ private import memo_artifacts_standards_traceability::RegulatoryStandard;
10
+ private import memo_viewpoints_definitions::MemoViewpoint;
11
+ private import memo_viewpoints_stakeholders_concerns::MemoStakeholder;
9
12
 
10
13
  part def MethodologyLibrary :> MemoPart {
11
14
  attribute version : String;
12
15
  attribute domain : String;
13
- attribute :>> description : String;
14
16
  }
15
17
 
16
- // A rule's disposition under one methodology or project binding.
18
+ // A rule's disposition under one methodology or model binding.
17
19
  //
18
20
  // `targetRule` and `replacementRule` are typed references to the rule's own
19
21
  // `constraint def`, narrowed at the usage with `ref :>> targetRule : <Rule>`.
@@ -22,8 +24,21 @@ package memo_methodology_core {
22
24
  // would be a MEMO-specific identifier where the language has one. The
23
25
  // stable rule ID survives on the rule itself, for audit records and
24
26
  // diagnostics — a different job from being the reference mechanism.
27
+ //
28
+ // A policy selects what it governs in ONE of three ways. A rule (`targetRule`),
29
+ // as above; every rule that enforces a clause of a standard
30
+ // (`targetStandard`, written `ref :>> targetStandard = <standard>;`); or every
31
+ // rule whose subject kind sits in a layer (`targetCategory`, a layer
32
+ // namespace by name, `"memo_assurance_safety_risk"`: a value cannot
33
+ // reference a package, so this one stays a string). A selection of several rules is
34
+ // still one decision with one rationale and one approval, so the tailoring
35
+ // record reports it once, with the rules it reached; a rule added later that
36
+ // the selection matches is covered by it. An invariant in the selection keeps
37
+ // running, as it does for a policy naming it.
25
38
  part def RulePolicy :> MemoPart {
26
- ref targetRule : MemoConsistencyRule;
39
+ ref targetRule : MemoConsistencyRule[0..1];
40
+ ref targetStandard : RegulatoryStandard[0..1];
41
+ attribute targetCategory : String[0..1];
27
42
  // A replacement must be another native constraint. A methodology
28
43
  // cannot replace a predicate with a string expression stored here.
29
44
  ref replacementRule : MemoConsistencyRule[0..1];
@@ -39,25 +54,56 @@ package memo_methodology_core {
39
54
  part def MethodologyDefinition :> MemoPart {
40
55
  attribute version : String;
41
56
  attribute domain : String;
42
- attribute :>> description : String;
43
57
  // Exactly one base methodology at most. Multiple inheritance is not a
44
58
  // multiplicity the resolver has conflict semantics for, so the model
45
59
  // does not permit expressing it.
46
60
  ref baseMethodology : MethodologyDefinition[0..1];
47
- // Whether the inclusion lists below are the whole story. Under
48
- // `explicit`, an empty list selects nothing.
61
+ // Whether the selection below is the whole story. Under `explicit`,
62
+ // what is not selected is out of scope; under `allAvailable`, every
63
+ // package the project resolved is in scope and the methodology selects
64
+ // nothing itself.
49
65
  attribute scopeMode : ScopeModeKind;
50
- // A methodology is an inclusion set. Layer entries normally name a
51
- // public MEMO layer namespace; module entries may name any qualified
52
- // package available to the project, including packages outside MEMO.
53
- attribute includedLayer : String[0..*];
54
- attribute includedModule : String[0..*];
55
- attribute includedStandard : String[0..*];
56
- attribute includedArtifactKind : String[0..*];
57
- attribute includedViewpoint : String[0..*];
66
+ // The packages a methodology selects are not listed here. They are
67
+ // what the package declaring the methodology PUBLICLY imports:
68
+ //
69
+ // public import memo_architecture_logical::*; // a layer
70
+ // public import memo_assurance_safety_risk::*; // one package
71
+ // public import memo_extension_ros::*; // an extension
72
+ //
73
+ // A public import is how SysML says a package passes another's members
74
+ // on to whoever imports it, so the selection is the import, followed
75
+ // transitively through public imports; a private import is the
76
+ // package's own business and selects nothing. A layer and an extension
77
+ // each have one package that publicly imports all of theirs. Because
78
+ // the package is the selection, a package declares one methodology.
79
+ // A project adds to the selection the same way, from its entrypoint
80
+ // package. A misspelled package is an import the compiler rejects.
81
+ //
82
+ // The standards, artifact kinds and viewpoints a methodology selects
83
+ // are TYPED: a standard is a RegulatoryStandard, an artifact kind is an
84
+ // ArtifactKind literal, a viewpoint is a MemoViewpoint. They were
85
+ // strings ("ISO 14155", "RiskManagementPlan", "VP-CTX"), and three
86
+ // standards and an artifact kind in the GPCA methodology named nothing
87
+ // the ontology declares: a string that matches nothing selects nothing,
88
+ // and nothing said so. Now the compiler does.
89
+ ref includedStandard : RegulatoryStandard[0..*];
90
+ attribute includedArtifactKind : ArtifactKind[0..*];
91
+ ref includedViewpoint : MemoViewpoint[0..*];
58
92
  part rulePolicy : RulePolicy[0..*];
59
93
  }
60
94
 
95
+ // Which viewpoints a role works with (plan O12). A viewpoint names the stakeholders it is written for,
96
+ // and that is what a role sees by default; a methodology may say otherwise for a role, and then THIS is
97
+ // what the role sees, an override and not an addition. A method that names a base starts from its
98
+ // role views, and a later one for the same stakeholder replaces the earlier.
99
+ //
100
+ // part rvSafety : RoleView { ref :>> forStakeholder = safetyEngineer; ref :>> shownViewpoint = (vpRiskChain, vpEvidenceTraceability); }
101
+ part def RoleView :> MemoPart {
102
+ // `stakeholder` and `viewpoint` are SysML keywords, so neither names a feature.
103
+ ref forStakeholder : MemoStakeholder;
104
+ ref shownViewpoint : MemoViewpoint[0..*];
105
+ }
106
+
61
107
  // Derived, never authored. The resolver projects this from a binding and
62
108
  // its methodology chain. If it is serialized for review it is generated
63
109
  // output that records its input hashes; it does not compete with the
@@ -65,32 +111,43 @@ package memo_methodology_core {
65
111
  // instances of it.
66
112
  part def ResolvedMethodology :> MemoPart {
67
113
  attribute version : String;
68
- // The effective inclusion set after the project binding has added any
69
- // project- or supplier-specific modules.
70
- attribute includedLayer : String[0..*];
71
- attribute includedModule : String[0..*];
72
114
  }
73
115
 
74
- part def ProjectMethodBinding :> MemoPart {
75
- attribute projectName : String;
116
+ // What a model is bound to: its name, the methodology it is governed by,
117
+ // and the rule policies it adds. "Model" is what Architect opens, one
118
+ // repository and one compile; "project" means a change set in an iteration.
119
+ part def ModelMethodBinding :> MemoPart {
120
+ attribute modelName : String;
76
121
  ref selectedMethodology : MethodologyDefinition;
77
- // Additive: what the project adds on top of the selected methodology.
78
- // An empty list under `explicit` means no project additions.
122
+ // `allAvailable` widens the model to every package it resolved,
123
+ // whatever the methodology selects; anything else leaves the
124
+ // methodology's mode in force. A model ADDS packages to the
125
+ // selection by importing them publicly in the package that declares
126
+ // this binding (`public import memo_extension_ros::*;`), the same way
127
+ // a methodology selects them. There is no list to keep beside it.
79
128
  attribute scopeMode : ScopeModeKind;
80
- // Project bindings may add project or supplier modules to the selected
81
- // methodology without requiring those packages to live under memo::.
82
- attribute includedModule : String[0..*];
83
- // The submission regimes this project targets, declared once here.
129
+ // The submission regimes this model targets, declared once here.
84
130
  // Everything downstream that needs to know which standards apply —
85
131
  // `memo standards check`, the standards checklist, the Architect gap
86
- // badges — reads this, so the regime axis is a project fact stated in
132
+ // badges — reads this, so the regime axis is a model fact stated in
87
133
  // SysML rather than a per-document array maintained in 44 places.
88
- // Empty means the project has not declared its regimes; a report that
134
+ // Empty means the model has not declared its regimes; a report that
89
135
  // needs them says so rather than assuming a default market.
136
+ //
137
+ // DEPRECATED in 0.14.0 (plan O1, O6): a `RegulatedDevice` states its own
138
+ // jurisdiction, one approval each. This is read only when the model declares
139
+ // no device, and ignored with a warning when it declares both.
90
140
  attribute regulatoryRegime : RegulatoryRegimeKind[0..*];
91
141
  part rulePolicy : RulePolicy[0..*];
92
142
  }
93
143
 
144
+ // DEPRECATED in 0.14.0, deleted in 0.15.0: the former spelling of
145
+ // ModelMethodBinding, kept so a model written with it still binds. MEMO
146
+ // reads `projectName` when `modelName` is absent and warns on either.
147
+ part def ProjectMethodBinding :> ModelMethodBinding {
148
+ attribute projectName : String;
149
+ }
150
+
94
151
  part def DhfDocumentBinding :> MemoPart {
95
152
  attribute documentTitle : String;
96
153
  attribute groupLabel : String;
@@ -103,7 +160,6 @@ package memo_methodology_core {
103
160
 
104
161
  part def Archetype :> MemoPart {
105
162
  attribute label : String;
106
- attribute :>> description : String;
107
163
  attribute category : String;
108
164
  attribute includedLayer : String;
109
165
  attribute includedStandard : String;
@@ -6,25 +6,28 @@ package memo_methodology_profiles {
6
6
  private import memo_methodology_patterns::*;
7
7
  private import memo_methodology_workflow::*;
8
8
  private import memo_methodology_gates::*;
9
+ private import memo_rules_closure::*;
10
+ private import memo_viewpoints_catalog::*;
11
+ private import memo_viewpoints_stakeholders_concerns::*;
9
12
  private import memo_core_enumerations::*;
10
13
  private import memo_core_methodology_scope::*;
11
14
 
12
15
  private import memo_core_common::*;
13
16
  private import memo_core_common::MemoIdentity;
14
17
  part mdCoreLibrary : MethodologyLibrary {
15
- @MemoIdentity { :>> providedId = "METHLIB-001"; }
16
- attribute :>> name = "MedicalDeviceMethodologyLibrary";
17
- attribute :>> version = "0.1";
18
+ @MemoIdentity { :>> providedId = "METHLIB-001"; :>> label = "MedicalDeviceMethodologyLibrary"; }
19
+ attribute :>> version = "0.15.0";
18
20
  attribute :>> domain = "medical device modeling";
19
- attribute :>> description = "Methodology layer for selecting, restricting, sequencing, tailoring, and lightly extending use of the medical-device ontology.";
21
+ doc /* Methodology layer for selecting, restricting, sequencing, tailoring, and lightly extending use of the medical-device ontology. */
20
22
  }
21
23
 
22
24
  // The default methodology deliberately selects everything the project's
23
25
  // resolved reusable packages provide. That is what `scopeMode` exists to
24
26
  // say: `allAvailable` is an authored decision, not an empty list that the
25
- // resolver silently reads as "allow everything". Under `allAvailable` the
26
- // inclusion lists must stay empty — authoring both would leave two
27
- // competing answers to the same question.
27
+ // resolver silently reads as "allow everything". Under `allAvailable` this
28
+ // package imports nothing publicly — a methodology selects by its
29
+ // package's public imports, and stating both would leave two competing
30
+ // answers to the same question.
28
31
  //
29
32
  // Before the flip this methodology carried a narrower `includedLayer` /
30
33
  // `includedModule` pair that nothing consumed: effective scope came from
@@ -33,100 +36,257 @@ package memo_methodology_profiles {
33
36
  // that into `allAvailable` preserves the effective result and removes the
34
37
  // second scope authority.
35
38
  part mdDefaultDefinition : MethodologyDefinition {
36
- @MemoIdentity { :>> providedId = "METH-MD-DEFAULT"; }
37
- attribute :>> name = "MedicalDeviceDefault";
38
- attribute :>> version = "0.6.5";
39
+ @MemoIdentity { :>> providedId = "METH-MD-DEFAULT"; :>> label = "MedicalDeviceDefault"; }
40
+ attribute :>> version = "0.15.0";
39
41
  attribute :>> domain = "medical device modeling";
40
- attribute :>> description = "MEMO default medical-device methodology. Selects every layer, discipline, standard, artifact kind, and viewpoint the resolved ontology and extension packages provide.";
42
+ doc /* MEMO default medical-device methodology. Selects every layer, discipline, standard, artifact kind, and viewpoint the resolved ontology and extension packages provide. */
41
43
  attribute :>> scopeMode = ScopeModeKind::allAvailable;
42
44
  }
43
45
 
44
46
  part useRiskAndResidualRule : ElementUsageRule {
45
- @MemoIdentity { :>> providedId = "RULE-001"; }
46
- attribute :>> name = "UseRiskAndResidualRisk";
47
+ @MemoIdentity { :>> providedId = "RULE-001"; :>> label = "UseRiskAndResidualRisk"; }
47
48
  attribute :>> elementTypeName = "Risk,ResidualRisk,RiskMatrix";
48
49
  attribute :>> strength = RuleStrengthKind::recommended;
49
50
  attribute :>> rationaleText = "Even a light methodology should distinguish pre- and post-mitigation risk and assess against a matrix.";
50
51
  }
51
52
 
52
53
  part requireVerifiedByRule : RelationUsageRule {
53
- @MemoIdentity { :>> providedId = "RULE-002"; }
54
- attribute :>> name = "VerifiedBysRequired";
55
- attribute :>> relationTypeName = "verify";
54
+ @MemoIdentity { :>> providedId = "RULE-002"; :>> label = "VerifiedBysRequired"; }
55
+ attribute :>> relationTypeName = "verifiedBy";
56
56
  attribute :>> strength = RuleStrengthKind::required;
57
57
  attribute :>> rationaleText = "Safety-relevant requirements and controls shall trace to verification.";
58
58
  }
59
59
 
60
60
  part lightRiskPattern : ModelingPattern {
61
- @MemoIdentity { :>> providedId = "PAT-001"; }
62
- attribute :>> name = "LightRiskBeforeAfterPattern";
61
+ @MemoIdentity { :>> providedId = "PAT-001"; :>> label = "LightRiskBeforeAfterPattern"; }
63
62
  attribute :>> intent = "Model hazard chain, before/after mitigation risk, controls, and residual evaluation in a lightweight way.";
64
63
  attribute :>> stage = WorkflowStageKind::risk;
65
64
  attribute :>> strength = RuleStrengthKind::recommended;
66
65
  }
67
66
 
68
67
  part lightTracePattern : ModelingPattern {
69
- @MemoIdentity { :>> providedId = "PAT-002"; }
70
- attribute :>> name = "CoreTracePattern";
68
+ @MemoIdentity { :>> providedId = "PAT-002"; :>> label = "CoreTracePattern"; }
71
69
  attribute :>> intent = "Need or risk to requirement, requirement to architecture, requirement/control to verification.";
72
70
  attribute :>> stage = WorkflowStageKind::requirements;
73
71
  attribute :>> strength = RuleStrengthKind::required;
74
72
  }
75
73
 
76
- action stepRequirements : MethodologyWorkflowStep {
77
- @MemoIdentity { :>> providedId = "STEP-001"; }
78
- attribute :>> name = "CaptureRequirements";
79
- attribute :>> stage = WorkflowStageKind::requirements;
80
- attribute :>> objectiveDescription = "Capture stakeholder needs and derive requirements.";
81
- attribute :>> entryCriteria = "Intended use and actors understood.";
82
- attribute :>> exitCriteria = "Initial requirement set exists.";
74
+ // The default method (plan O11): the steps a family works through, at the system of systems
75
+ // and at each system. `outputKinds` and the rules a step is `#DoneWhen` say when it is done.
76
+
77
+ action stepSosContext : MethodologyWorkflowStep {
78
+ @MemoIdentity { :>> providedId = "STEP-SOS-01"; :>> label = "SosContext"; }
79
+ attribute :>> stage = WorkflowStageKind::context;
80
+ attribute :>> level = MethodLevelKind::systemOfSystems;
81
+ ref :>> role = projectLead;
82
+ ref :>> guideViewpoint = vpSystemContext;
83
+ attribute :>> outputKinds = ("SystemOfSystems", "System");
84
+ attribute :>> objectiveDescription = "State the system of systems and the systems it is made of.";
85
+ attribute :>> entryCriteria = "The family is chosen.";
86
+ attribute :>> exitCriteria = "The system of systems and its constituent systems are declared.";
87
+ }
88
+
89
+ action stepSosOperational : MethodologyWorkflowStep {
90
+ @MemoIdentity { :>> providedId = "STEP-SOS-02"; :>> label = "SosOperationalAnalysis"; }
91
+ attribute :>> stage = WorkflowStageKind::operational;
92
+ attribute :>> level = MethodLevelKind::systemOfSystems;
93
+ ref :>> role = systemArchitect;
94
+ ref :>> guideViewpoint = vpUseCase;
95
+ attribute :>> outputKinds = ("UseCase", "OperationalWorkflow");
96
+ attribute :>> objectiveDescription = "Describe the clinical procedures the systems serve together, and the workflows that realize them.";
97
+ attribute :>> entryCriteria = "The constituent systems are declared.";
98
+ attribute :>> exitCriteria = "Each clinical procedure has a workflow.";
83
99
  }
84
100
 
85
- action stepArchitecture : MethodologyWorkflowStep {
86
- @MemoIdentity { :>> providedId = "STEP-002"; }
87
- attribute :>> name = "DefineArchitecture";
101
+ action stepSosFunctions : MethodologyWorkflowStep {
102
+ @MemoIdentity { :>> providedId = "STEP-SOS-03"; :>> label = "SosFunctionsAndChains"; }
103
+ attribute :>> stage = WorkflowStageKind::functional;
104
+ attribute :>> level = MethodLevelKind::systemOfSystems;
105
+ ref :>> role = systemArchitect;
106
+ ref :>> guideViewpoint = vpFunctionalFlow;
107
+ attribute :>> outputKinds = ("FunctionalFlow");
108
+ attribute :>> objectiveDescription = "Follow the functions across the systems in functional chains.";
109
+ attribute :>> entryCriteria = "Clinical procedures and workflows exist.";
110
+ attribute :>> exitCriteria = "Each cross-system chain is stated.";
111
+ }
112
+
113
+ action stepSosArchitecture : MethodologyWorkflowStep {
114
+ @MemoIdentity { :>> providedId = "STEP-SOS-04"; :>> label = "SosArchitecture"; }
88
115
  attribute :>> stage = WorkflowStageKind::architecture;
89
- attribute :>> objectiveDescription = "Define key software and hardware architecture elements and interfaces.";
90
- attribute :>> entryCriteria = "Initial requirements exist.";
91
- attribute :>> exitCriteria = "Core architecture and interfaces exist.";
116
+ attribute :>> level = MethodLevelKind::systemOfSystems;
117
+ ref :>> role = systemArchitect;
118
+ ref :>> guideViewpoint = vpSystemDecomposition;
119
+ attribute :>> outputKinds = ("Interface");
120
+ attribute :>> objectiveDescription = "Define the interfaces between the systems.";
121
+ attribute :>> entryCriteria = "Functional chains exist.";
122
+ attribute :>> exitCriteria = "Each pair of systems that exchange something has an interface.";
92
123
  }
93
124
 
94
- action stepRisk : MethodologyWorkflowStep {
95
- @MemoIdentity { :>> providedId = "STEP-003"; }
96
- attribute :>> name = "PerformRiskAnalysis";
125
+ action stepSosHazards : MethodologyWorkflowStep {
126
+ @MemoIdentity { :>> providedId = "STEP-SOS-05"; :>> label = "SosHazards"; }
97
127
  attribute :>> stage = WorkflowStageKind::risk;
98
- attribute :>> objectiveDescription = "Create core risk chain and controls.";
99
- attribute :>> entryCriteria = "Initial requirements and key behavior exist.";
100
- attribute :>> exitCriteria = "Risk and control model exists.";
128
+ attribute :>> level = MethodLevelKind::systemOfSystems;
129
+ ref :>> role = safetyEngineer;
130
+ ref :>> guideViewpoint = vpRiskChain;
131
+ attribute :>> outputKinds = ("Hazard");
132
+ attribute :>> objectiveDescription = "Identify the hazards that arise only from the systems working together.";
133
+ attribute :>> entryCriteria = "The architecture and its interfaces exist.";
134
+ attribute :>> exitCriteria = "Each hazard of the combination has a control.";
135
+ }
136
+ #DoneWhen dependency from stepSosHazards to memo_rules_closure::HazardMitigationRule;
137
+
138
+ action stepSysOperational : MethodologyWorkflowStep {
139
+ @MemoIdentity { :>> providedId = "STEP-SYS-01"; :>> label = "SystemOperational"; }
140
+ attribute :>> stage = WorkflowStageKind::operational;
141
+ attribute :>> level = MethodLevelKind::system;
142
+ ref :>> role = systemArchitect;
143
+ ref :>> guideViewpoint = vpUseCase;
144
+ attribute :>> outputKinds = ("UseCase");
145
+ attribute :>> objectiveDescription = "State what the system is used for.";
146
+ attribute :>> entryCriteria = "The system is declared.";
147
+ attribute :>> exitCriteria = "Each use of the system is a use case.";
148
+ }
149
+
150
+ action stepSysFunctional : MethodologyWorkflowStep {
151
+ @MemoIdentity { :>> providedId = "STEP-SYS-02"; :>> label = "SystemFunctional"; }
152
+ attribute :>> stage = WorkflowStageKind::functional;
153
+ attribute :>> level = MethodLevelKind::system;
154
+ ref :>> role = systemArchitect;
155
+ ref :>> guideViewpoint = vpFunctionalArchitecture;
156
+ attribute :>> outputKinds = ("SystemFunction");
157
+ attribute :>> objectiveDescription = "State what the system does.";
158
+ attribute :>> entryCriteria = "The system use cases exist.";
159
+ attribute :>> exitCriteria = "Each function is stated.";
160
+ }
161
+
162
+ action stepSysLogical : MethodologyWorkflowStep {
163
+ @MemoIdentity { :>> providedId = "STEP-SYS-03"; :>> label = "SystemLogical"; }
164
+ attribute :>> stage = WorkflowStageKind::logical;
165
+ attribute :>> level = MethodLevelKind::system;
166
+ ref :>> role = systemArchitect;
167
+ ref :>> guideViewpoint = vpLogicalArchitecture;
168
+ attribute :>> outputKinds = ("LogicalComponent");
169
+ attribute :>> objectiveDescription = "Divide the system into logical components and allocate its functions.";
170
+ attribute :>> entryCriteria = "The system functions exist.";
171
+ attribute :>> exitCriteria = "Every function is allocated to a component.";
172
+ }
173
+ #DoneWhen dependency from stepSysLogical to memo_rules_closure::LogicalFunctionAllocationRule;
174
+
175
+ action stepSysHardware : MethodologyWorkflowStep {
176
+ @MemoIdentity { :>> providedId = "STEP-SYS-04"; :>> label = "SystemHardware"; }
177
+ attribute :>> stage = WorkflowStageKind::physical;
178
+ attribute :>> level = MethodLevelKind::system;
179
+ ref :>> role = hardwareEngineer;
180
+ ref :>> guideViewpoint = vpHardwareArchitecture;
181
+ attribute :>> outputKinds = ("PhysicalAssembly");
182
+ attribute :>> objectiveDescription = "Realize the logical components in hardware.";
183
+ attribute :>> entryCriteria = "The logical components exist.";
184
+ attribute :>> exitCriteria = "The hardware assemblies are declared.";
101
185
  }
102
186
 
103
- action stepVerification : MethodologyWorkflowStep {
104
- @MemoIdentity { :>> providedId = "STEP-004"; }
105
- attribute :>> name = "PlanVerification";
187
+ action stepSysSoftware : MethodologyWorkflowStep {
188
+ @MemoIdentity { :>> providedId = "STEP-SYS-05"; :>> label = "SystemSoftware"; }
189
+ attribute :>> stage = WorkflowStageKind::physical;
190
+ attribute :>> level = MethodLevelKind::system;
191
+ ref :>> role = softwareArchitect;
192
+ ref :>> guideViewpoint = vpSoftwareComponents;
193
+ attribute :>> outputKinds = ("SoftwareSystem");
194
+ attribute :>> objectiveDescription = "Realize the logical components in software.";
195
+ attribute :>> entryCriteria = "The logical components exist.";
196
+ attribute :>> exitCriteria = "The software is declared.";
197
+ }
198
+
199
+ action stepSysHumanFactors : MethodologyWorkflowStep {
200
+ @MemoIdentity { :>> providedId = "STEP-SYS-06"; :>> label = "SystemHumanFactors"; }
201
+ attribute :>> stage = WorkflowStageKind::humanFactors;
202
+ attribute :>> level = MethodLevelKind::system;
203
+ ref :>> role = usabilityEngineer;
204
+ ref :>> guideViewpoint = vpHumanFactors;
205
+ attribute :>> outputKinds = ("UserInterface");
206
+ attribute :>> objectiveDescription = "Design how people use the system.";
207
+ attribute :>> entryCriteria = "The system use cases exist.";
208
+ attribute :>> exitCriteria = "The user interface is declared.";
209
+ }
210
+
211
+ action stepSysRisk : MethodologyWorkflowStep {
212
+ @MemoIdentity { :>> providedId = "STEP-SYS-07"; :>> label = "SystemRisk"; }
213
+ attribute :>> stage = WorkflowStageKind::risk;
214
+ attribute :>> level = MethodLevelKind::system;
215
+ ref :>> role = safetyEngineer;
216
+ ref :>> guideViewpoint = vpRiskChain;
217
+ attribute :>> outputKinds = ("Hazard", "Risk");
218
+ attribute :>> objectiveDescription = "Identify hazards, estimate risk and state the controls.";
219
+ attribute :>> entryCriteria = "The system functions exist.";
220
+ attribute :>> exitCriteria = "Each hazard has a control.";
221
+ }
222
+ #DoneWhen dependency from stepSysRisk to memo_rules_closure::HazardMitigationRule;
223
+
224
+ action stepSysSecurity : MethodologyWorkflowStep {
225
+ @MemoIdentity { :>> providedId = "STEP-SYS-08"; :>> label = "SystemSecurity"; }
226
+ attribute :>> stage = WorkflowStageKind::security;
227
+ attribute :>> level = MethodLevelKind::system;
228
+ ref :>> role = securityEngineer;
229
+ ref :>> guideViewpoint = vpCybersecurity;
230
+ attribute :>> outputKinds = ("Threat");
231
+ attribute :>> objectiveDescription = "Identify threats and state the mitigations.";
232
+ attribute :>> entryCriteria = "The system functions exist.";
233
+ attribute :>> exitCriteria = "Each threat is mitigated.";
234
+ }
235
+ #DoneWhen dependency from stepSysSecurity to memo_rules_closure::ThreatMitigationRule;
236
+
237
+ action stepSysVerification : MethodologyWorkflowStep {
238
+ @MemoIdentity { :>> providedId = "STEP-SYS-09"; :>> label = "SystemVerification"; }
106
239
  attribute :>> stage = WorkflowStageKind::verificationStage;
107
- attribute :>> objectiveDescription = "Define verification and evidence expectations.";
108
- attribute :>> entryCriteria = "Requirements and controls exist.";
109
- attribute :>> exitCriteria = "Verification cases and evidence targets exist.";
240
+ attribute :>> level = MethodLevelKind::system;
241
+ ref :>> role = verificationEngineer;
242
+ ref :>> guideViewpoint = vpVerificationCoverage;
243
+ attribute :>> outputKinds = ("VerificationCase");
244
+ attribute :>> objectiveDescription = "Verify what the system must do and the controls it relies on.";
245
+ attribute :>> entryCriteria = "Risks and their controls exist.";
246
+ attribute :>> exitCriteria = "Each verification case has a target.";
247
+ }
248
+ #DoneWhen dependency from stepSysVerification to memo_rules_closure::VerificationCaseTargetRule;
249
+
250
+ action stepSysRelease : MethodologyWorkflowStep {
251
+ @MemoIdentity { :>> providedId = "STEP-SYS-10"; :>> label = "SystemRelease"; }
252
+ attribute :>> stage = WorkflowStageKind::release;
253
+ attribute :>> level = MethodLevelKind::system;
254
+ ref :>> role = regulatoryEngineer;
255
+ attribute :>> outputKinds = ("ReleaseRecord");
256
+ attribute :>> objectiveDescription = "Release the system: its part number, revision and the commit it was built from.";
257
+ attribute :>> entryCriteria = "The system is verified.";
258
+ attribute :>> exitCriteria = "The release has a record.";
110
259
  }
111
- first stepRequirements then stepArchitecture;
112
- first stepArchitecture then stepRisk;
113
- first stepRisk then stepVerification;
260
+
261
+ // Order, within a level.
262
+ first stepSosContext then stepSosOperational;
263
+ first stepSosOperational then stepSosFunctions;
264
+ first stepSosFunctions then stepSosArchitecture;
265
+ first stepSosArchitecture then stepSosHazards;
266
+
267
+ first stepSysOperational then stepSysFunctional;
268
+ first stepSysFunctional then stepSysLogical;
269
+ first stepSysLogical then stepSysHardware;
270
+ first stepSysLogical then stepSysSoftware;
271
+ first stepSysOperational then stepSysHumanFactors;
272
+ first stepSysFunctional then stepSysRisk;
273
+ first stepSysFunctional then stepSysSecurity;
274
+ first stepSysRisk then stepSysVerification;
275
+ first stepSysVerification then stepSysRelease;
114
276
 
115
277
  part gateLightComplete : QualityGate {
116
- @MemoIdentity { :>> providedId = "GATE-001"; }
117
- attribute :>> name = "LightMethodReady";
278
+ @MemoIdentity { :>> providedId = "GATE-001"; :>> label = "LightMethodReady"; }
118
279
  attribute :>> gateStage = WorkflowStageKind::verificationStage;
119
280
  attribute :>> passCriteria = "Core traceability, risk, verification, and RMF view support are present.";
120
281
  }
121
282
 
122
283
  // The GPCA binding used to live here, in the reusable default methodology,
123
284
  // naming its methodology by string. A project binding is project content:
124
- // it now lives in the GPCA project's own `model/catalog/project.sysml` and
285
+ // it now lives in the GPCA project's own `model/methodology/project.sysml` and
125
286
  // references its methodology with a typed SysML reference.
126
287
 
127
288
  part rmpDoc : DhfDocumentBinding {
128
- @MemoIdentity { :>> providedId = "DHF-001"; }
129
- attribute :>> name = "RiskManagementPlan";
289
+ @MemoIdentity { :>> providedId = "DHF-001"; :>> label = "RiskManagementPlan"; }
130
290
  attribute :>> documentTitle = "Risk Management Plan";
131
291
  attribute :>> groupLabel = "Risk Management";
132
292
  attribute :>> templateId = "iso-14971/rmp";
@@ -137,8 +297,7 @@ package memo_methodology_profiles {
137
297
  }
138
298
 
139
299
  part harDoc : DhfDocumentBinding {
140
- @MemoIdentity { :>> providedId = "DHF-002"; }
141
- attribute :>> name = "HazardAnalysisReport";
300
+ @MemoIdentity { :>> providedId = "DHF-002"; :>> label = "HazardAnalysisReport"; }
142
301
  attribute :>> documentTitle = "Hazard Analysis Report";
143
302
  attribute :>> groupLabel = "Risk Management";
144
303
  attribute :>> templateId = "iso-14971/har";
@@ -149,8 +308,7 @@ package memo_methodology_profiles {
149
308
  }
150
309
 
151
310
  part sadDoc : DhfDocumentBinding {
152
- @MemoIdentity { :>> providedId = "DHF-003"; }
153
- attribute :>> name = "SoftwareArchitectureDescription";
311
+ @MemoIdentity { :>> providedId = "DHF-003"; :>> label = "SoftwareArchitectureDescription"; }
154
312
  attribute :>> documentTitle = "Software Architecture Description";
155
313
  attribute :>> groupLabel = "Software";
156
314
  attribute :>> templateId = "iec-62304/sad";
@@ -161,8 +319,7 @@ package memo_methodology_profiles {
161
319
  }
162
320
 
163
321
  part threatModelDoc : DhfDocumentBinding {
164
- @MemoIdentity { :>> providedId = "DHF-004"; }
165
- attribute :>> name = "CybersecurityThreatModel";
322
+ @MemoIdentity { :>> providedId = "DHF-004"; :>> label = "CybersecurityThreatModel"; }
166
323
  attribute :>> documentTitle = "Threat Model";
167
324
  attribute :>> groupLabel = "Cybersecurity";
168
325
  attribute :>> templateId = "fda-cybersecurity/threat-model";
@@ -173,8 +330,7 @@ package memo_methodology_profiles {
173
330
  }
174
331
 
175
332
  part vvPlanDoc : DhfDocumentBinding {
176
- @MemoIdentity { :>> providedId = "DHF-005"; }
177
- attribute :>> name = "VerificationValidationPlan";
333
+ @MemoIdentity { :>> providedId = "DHF-005"; :>> label = "VerificationValidationPlan"; }
178
334
  attribute :>> documentTitle = "V&V Plan";
179
335
  attribute :>> groupLabel = "Verification & Validation";
180
336
  attribute :>> templateId = "21cfr820/vv-plan";
@@ -3,6 +3,9 @@ package memo_methodology_workflow {
3
3
 
4
4
  private import memo_core_common::*;
5
5
  private import memo_core_enumerations::*;
6
+ private import memo_core_relationships::*; // MemoTypedDependency
7
+ private import memo_viewpoints_stakeholders_concerns::MemoStakeholder;
8
+ private import memo_viewpoints_definitions::MemoViewpoint;
6
9
 
7
10
  // Named for its axis: this is a step in a METHODOLOGY workflow (a lifecycle
8
11
  // stage with entry/exit criteria), distinct from an OPERATIONAL workflow's
@@ -10,10 +13,35 @@ package memo_methodology_workflow {
10
13
  // two carry different attributes and must not share a short name — an
11
14
  // overloaded name resolves by load order and silently validates a usage
12
15
  // against the wrong type.
16
+ //
17
+ // A methodology's steps are the usages of this type in the package that
18
+ // declares it; a methodology that names a `baseMethodology` adds its steps to
19
+ // that one's, base first (a step is added, never replaced or dropped).
20
+ // Order is `first <step> then <step>;`, within a level.
21
+ //
22
+ // What makes a step DONE is stated, not assumed (plan O11, T10): every
23
+ // `outputKinds` kind has an element in the workspace, and every rule the step
24
+ // `#DoneWhen`s has a subject there and no finding on it. A step that states
25
+ // neither has no done criterion and is never reported as done.
13
26
  action def MethodologyWorkflowStep :> MemoAction {
14
27
  attribute stage : WorkflowStageKind;
15
28
  attribute objectiveDescription : String;
16
29
  attribute entryCriteria : String;
17
30
  attribute exitCriteria : String;
31
+ // Where the step is worked: on the system of systems, or on one system.
32
+ attribute level : MethodLevelKind[0..1];
33
+ // Who does it. A usage name from the stakeholders the viewpoints bind.
34
+ ref role : MemoStakeholder[0..1];
35
+ // Kind names, as `visibleKinds` of a viewpoint are: a value cannot reference a
36
+ // definition. A kind the ontology does not declare is a finding of the selector
37
+ // vocabulary check, not a silent step that can never be done.
38
+ attribute inputKinds : String[0..*];
39
+ attribute outputKinds : String[0..*];
40
+ // The viewpoint that opens this step in the Guide. (`viewpoint` is a SysML keyword.)
41
+ ref guideViewpoint : MemoViewpoint[0..1];
42
+ }
43
+
44
+ metadata def DoneWhen :> MemoTypedDependency {
45
+ doc /* `#DoneWhen dependency from <step> to <rule>, <rule>;` The step is done when each of these rules has a subject in the workspace and no finding on it. */
18
46
  }
19
47
  }