@memoarchitect/ontology 0.7.0 → 0.8.24

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 (270) hide show
  1. package/README.md +4 -2
  2. package/examples/connected-patient-monitor/memo.package.yaml +3 -0
  3. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +1 -1
  4. package/examples/connected-patient-monitor/model/catalog/viewpoints/unassigned/views/connected_patient_monitor_overview.sysml +1 -1
  5. package/examples/embedded-infusion-pump/memo.package.yaml +3 -0
  6. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +8 -6
  7. package/examples/embedded-infusion-pump/model/catalog/viewpoints/unassigned/views/embedded_infusion_pump_overview.sysml +1 -1
  8. package/examples/functional-logical-physical/memo.package.yaml +3 -0
  9. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +6 -6
  10. package/examples/functional-logical-physical/model/catalog/viewpoints/unassigned/views/functional_logical_physical_overview.sysml +1 -1
  11. package/examples/gpca-pump/memo.package.yaml +3 -0
  12. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +18 -8
  13. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +341 -99
  14. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +25 -11
  15. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +328 -271
  16. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +52 -11
  17. package/examples/gpca-pump/model/catalog/gpca_context.sysml +14 -3
  18. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +8 -5
  19. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +175 -259
  20. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +97 -103
  21. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +5 -10
  22. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +101 -100
  23. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +161 -0
  24. package/examples/gpca-pump/model/catalog/gpca_system.sysml +17 -17
  25. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +274 -334
  26. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +115 -35
  27. package/examples/gpca-pump/model/catalog/project.sysml +5 -0
  28. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +2 -4
  29. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +2 -4
  30. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +1 -4
  31. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +2 -5
  32. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +1 -3
  33. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +1 -3
  34. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +1 -3
  35. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +4 -7
  36. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +3 -5
  37. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +1 -3
  38. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +2 -4
  39. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +1 -3
  40. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +2 -4
  41. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +2 -4
  42. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +1 -3
  43. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +5 -8
  44. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +1 -3
  45. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +6 -6
  46. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +5 -6
  47. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +2 -4
  48. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +1 -3
  49. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +2 -5
  50. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +3 -5
  51. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +5 -6
  52. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +5 -6
  53. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +2 -4
  54. package/examples/ivd-laboratory-system/memo.package.yaml +3 -0
  55. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +1 -1
  56. package/examples/ivd-laboratory-system/model/catalog/viewpoints/unassigned/views/ivd_laboratory_system_overview.sysml +1 -1
  57. package/examples/manual-surgical-instrument/memo.package.yaml +3 -0
  58. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +4 -3
  59. package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/views/manual_surgical_instrument_overview.sysml +1 -1
  60. package/examples/multidimensional-layers/memo.package.yaml +3 -0
  61. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -2
  62. package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/views/multidimensional_layers_overview.sysml +0 -1
  63. package/examples/nested-architecture-dsm/memo.package.yaml +3 -0
  64. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +133 -128
  65. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +139 -157
  66. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +56 -33
  67. package/examples/nested-architecture-dsm/model/catalog/traces.sysml +25 -26
  68. package/examples/reusable-instrument/memo.package.yaml +3 -0
  69. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +16 -23
  70. package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/views/reusable_instrument_overview.sysml +0 -1
  71. package/examples/ros-mobile-robot/README.md +40 -0
  72. package/examples/ros-mobile-robot/memo.package.yaml +3 -0
  73. package/examples/ros-mobile-robot/model/catalog/project.sysml +33 -0
  74. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +296 -0
  75. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +7 -0
  76. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +12 -0
  77. package/examples/software-only-medical-device/memo.package.yaml +3 -0
  78. package/examples/software-only-medical-device/model/catalog/project.sysml +4 -0
  79. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +12 -6
  80. package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/views/software_only_medical_device_overview.sysml +0 -1
  81. package/examples/surgical-closure-workflow/memo.package.yaml +3 -0
  82. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +58 -75
  83. package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/views/surgical_closure_workflow_overview.sysml +0 -1
  84. package/examples/surgical-robot/memo.package.yaml +3 -0
  85. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +1 -1
  86. package/examples/surgical-robot/model/catalog/viewpoints/unassigned/views/surgical_robot_overview.sysml +0 -1
  87. package/examples/sysml-diagram-samples/memo.package.yaml +2 -0
  88. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +12 -18
  89. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +8 -11
  90. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +43 -68
  91. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +57 -68
  92. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +40 -70
  93. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +4 -8
  94. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +1 -20
  95. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +52 -84
  96. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +22 -33
  97. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +13 -10
  98. package/examples/temperature-alarm/memo.package.yaml +3 -0
  99. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +28 -25
  100. package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/views/temperature_alarm_overview.sysml +0 -1
  101. package/examples/ui-screen-regions/memo.package.yaml +3 -0
  102. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +57 -33
  103. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +102 -79
  104. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +5 -5
  105. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +21 -6
  106. package/examples/ui-screen-regions/model/catalog/relationships.sysml +8 -0
  107. package/examples/ui-screen-regions/model/catalog/traces.sysml +28 -125
  108. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +2 -3
  109. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +1 -2
  110. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +1 -2
  111. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +1 -2
  112. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +1 -2
  113. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +1 -2
  114. package/extensions/LICENSES/MIT.txt +19 -0
  115. package/extensions/README.md +94 -0
  116. package/extensions/aadl/memo.package.yaml +18 -0
  117. package/extensions/aadl/src/aadl_extension.sysml +6 -0
  118. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +147 -0
  119. package/extensions/aadl/src/methodology/aadl_methodology.sysml +17 -0
  120. package/extensions/aadl/src/runtime/memo_aadl_runtime.sysml +56 -0
  121. package/extensions/cloud/memo.package.yaml +18 -0
  122. package/extensions/cloud/src/cloud_extension.sysml +44 -0
  123. package/extensions/cloud/src/methodology/cloud_methodology.sysml +17 -0
  124. package/extensions/container/memo.package.yaml +18 -0
  125. package/extensions/container/src/container_extension.sysml +37 -0
  126. package/extensions/container/src/methodology/container_methodology.sysml +17 -0
  127. package/extensions/messaging/memo.package.yaml +18 -0
  128. package/extensions/messaging/src/messaging_extension.sysml +64 -0
  129. package/extensions/messaging/src/methodology/messaging_methodology.sysml +17 -0
  130. package/extensions/ros/memo.package.yaml +18 -0
  131. package/extensions/ros/src/methodology/ros_methodology.sysml +25 -0
  132. package/extensions/ros/src/ros_extension.sysml +200 -0
  133. package/extensions/template/src/extension.sysml +37 -0
  134. package/memo.manifest.yaml +13 -2
  135. package/methodologies/default/memo.package.yaml +1 -1
  136. package/methodologies/gpca/memo.package.yaml +1 -1
  137. package/ontology/memo.package.yaml +1 -1
  138. package/package.json +5 -3
  139. package/profile/memo.package.yaml +1 -1
  140. package/src/architecture/decisions/memo_decisions.sysml +23 -2
  141. package/src/architecture/functional/behavior/memo_behavior.sysml +51 -23
  142. package/src/architecture/functional/constraints/memo_constraints.sysml +3 -2
  143. package/src/architecture/functional/functions/memo_functions.sysml +93 -36
  144. package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +2 -2
  145. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +46 -22
  146. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +40 -13
  147. package/src/architecture/implementation/ui/memo_ui.sysml +83 -43
  148. package/src/architecture/logical/interfaces/memo_interfaces.sysml +64 -12
  149. package/src/architecture/logical/structure/memo_logical_structure.sysml +26 -25
  150. package/src/architecture/operational/activities/memo_activities.sysml +27 -29
  151. package/src/architecture/operational/context/actors/memo_actors.sysml +8 -10
  152. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +16 -33
  153. package/src/architecture/operational/context/use_context/memo_use_context.sysml +42 -17
  154. package/src/architecture/operational/scenarios/memo_scenarios.sysml +36 -84
  155. package/src/architecture/operational/structure/memo_operational.sysml +42 -13
  156. package/src/architecture/operational/use_cases/memo_use_cases.sysml +35 -27
  157. package/src/architecture/operational/workflows/memo_workflows.sysml +45 -28
  158. package/src/architecture/realization/deployment/memo_deployment.sysml +115 -20
  159. package/src/architecture/realization/physical/memo_physical_architecture.sysml +29 -4
  160. package/src/artifacts/configuration_management/memo_configuration_management.sysml +16 -0
  161. package/src/artifacts/core/memo_controlled_artifacts.sysml +3 -1
  162. package/src/artifacts/standards/cfr_21_820.sysml +116 -0
  163. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +80 -0
  164. package/src/artifacts/standards/iec_60601_1.sysml +149 -0
  165. package/src/artifacts/standards/iec_60601_1_2.sysml +56 -0
  166. package/src/artifacts/standards/iec_60812.sysml +51 -0
  167. package/src/artifacts/standards/iec_62304.sysml +210 -0
  168. package/src/artifacts/standards/iec_62366_1.sysml +113 -0
  169. package/src/artifacts/standards/iec_81001_5_1.sysml +84 -0
  170. package/src/artifacts/standards/iso_13485.sysml +113 -0
  171. package/src/artifacts/standards/iso_14971.sysml +94 -0
  172. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +42 -0
  173. package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +132 -0
  174. package/src/artifacts/templates/dhf/21cfr820/design-input.md +1 -1
  175. package/src/artifacts/templates/dhf/21cfr820/design-output.md +5 -5
  176. package/src/artifacts/templates/dhf/21cfr820/design-review.md +1 -1
  177. package/src/artifacts/templates/dhf/21cfr820/design-validation.md +2 -2
  178. package/src/artifacts/templates/dhf/21cfr820/design-verification.md +2 -2
  179. package/src/artifacts/templates/dhf/21cfr820/dhf-index.md +2 -2
  180. package/src/artifacts/templates/dhf/21cfr820/transfer-plan.md +1 -1
  181. package/src/artifacts/templates/dhf/21cfr820/user-needs.md +1 -1
  182. package/src/artifacts/templates/dhf/21cfr820/vv-plan.md +3 -3
  183. package/src/artifacts/templates/dhf/21cfr820/vv-report.md +4 -4
  184. package/src/artifacts/templates/dhf/fda-cybersecurity/incident-response.md +1 -1
  185. package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +3 -2
  186. package/src/artifacts/templates/dhf/fda-cybersecurity/security-arch.md +2 -2
  187. package/src/artifacts/templates/dhf/fda-cybersecurity/threat-model.md +4 -4
  188. package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +4 -3
  189. package/src/artifacts/templates/dhf/iec-60601/hrs.md +170 -0
  190. package/src/artifacts/templates/dhf/iec-62304/detailed-design.md +1 -1
  191. package/src/artifacts/templates/dhf/iec-62304/integration-test.md +3 -3
  192. package/src/artifacts/templates/dhf/iec-62304/sad.md +6 -5
  193. package/src/artifacts/templates/dhf/iec-62304/sbom.md +3 -2
  194. package/src/artifacts/templates/dhf/iec-62304/sdp.md +5 -4
  195. package/src/artifacts/templates/dhf/iec-62304/soup.md +4 -2
  196. package/src/artifacts/templates/dhf/iec-62304/srs.md +54 -20
  197. package/src/artifacts/templates/dhf/iec-62304/sw-traceability.md +3 -3
  198. package/src/artifacts/templates/dhf/iec-62304/system-test.md +1 -1
  199. package/src/artifacts/templates/dhf/iec-62366/summative-eval.md +1 -1
  200. package/src/artifacts/templates/dhf/iec-62366/task-analysis.md +40 -4
  201. package/src/artifacts/templates/dhf/iec-62366/ue-plan.md +1 -1
  202. package/src/artifacts/templates/dhf/iec-62366/urra.md +3 -3
  203. package/src/artifacts/templates/dhf/iso-14971/fmea.md +42 -19
  204. package/src/artifacts/templates/dhf/iso-14971/har.md +3 -3
  205. package/src/artifacts/templates/dhf/iso-14971/rmp.md +2 -2
  206. package/src/artifacts/templates/dhf/system/sad.md +173 -0
  207. package/src/artifacts/templates/dhf/system/standards-checklist.md +87 -0
  208. package/src/artifacts/templates/dhf/system/standards-traceability.md +125 -0
  209. package/src/artifacts/templates/dhf/system/syrs.md +128 -0
  210. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +40 -21
  211. package/src/assurance/human_factors/memo_human_factors.sysml +29 -22
  212. package/src/assurance/requirements/memo_requirements.sysml +7 -20
  213. package/src/assurance/requirements/needs/memo_needs.sysml +1 -1
  214. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +118 -13
  215. package/src/assurance/safety_risk/memo_risk.sysml +90 -7
  216. package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +16 -0
  217. package/src/assurance/verification_validation/memo_assurance.sysml +17 -21
  218. package/src/core/annotations/memo_annotations.sysml +25 -6
  219. package/src/core/common/memo_common.sysml +130 -21
  220. package/src/core/consistency_rules/consistency_rules.sysml +1 -1
  221. package/src/core/dimensions/dimensions.sysml +12 -0
  222. package/src/core/enumerations/memo_enumerations.sysml +60 -14
  223. package/src/core/relationships/memo_relationships.sysml +199 -196
  224. package/src/memo_namespaces.sysml +30 -0
  225. package/src/methodology/core/memo_core.sysml +24 -0
  226. package/src/methodology/profiles/memo_profiles.sysml +1 -1
  227. package/src/methodology/workflow/memo_workflow.sysml +5 -5
  228. package/src/rules/closure/closure_rules.sysml +20 -20
  229. package/src/rules/crosslayer/cross_layer_rules.sysml +2 -2
  230. package/src/rules/ontology/ontology_invariants.sysml +223 -11
  231. package/src/rules/quantitative/quantitative_rules.sysml +2 -2
  232. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +30 -30
  233. package/src/viewpoints/clinical/clinical_viewpoint.sysml +2 -3
  234. package/src/viewpoints/context/context_viewpoint.sysml +2 -3
  235. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +1 -2
  236. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +2 -4
  237. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +46 -3
  238. package/src/viewpoints/functional/functional_viewpoint.sysml +2 -3
  239. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +2 -3
  240. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +2 -3
  241. package/src/viewpoints/logical/logical_viewpoint.sysml +1 -2
  242. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +1 -2
  243. package/src/viewpoints/operational/operational_viewpoint.sysml +2 -3
  244. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +2 -3
  245. package/src/viewpoints/physical/physical_viewpoint.sysml +1 -2
  246. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +1 -2
  247. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +1 -2
  248. package/src/viewpoints/requirements/requirements_viewpoint.sysml +1 -2
  249. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +1 -2
  250. package/src/viewpoints/risk/risk_viewpoint.sysml +1 -2
  251. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +1 -2
  252. package/src/viewpoints/software/software_viewpoint.sysml +1 -2
  253. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +1 -2
  254. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +2 -3
  255. package/src/viewpoints/usability/usability_viewpoint.sysml +1 -2
  256. package/src/viewpoints/verification/verification_viewpoint.sysml +2 -3
  257. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +2 -3
  258. package/templates/connected-device/memo.package.yaml +2 -0
  259. package/templates/default/memo.package.yaml +2 -0
  260. package/templates/infusion-pump/memo.package.yaml +2 -0
  261. package/templates/monitoring-device/memo.package.yaml +2 -0
  262. package/templates/samd/memo.package.yaml +2 -0
  263. package/examples/extensions/README.md +0 -16
  264. package/examples/extensions/template/src/extension.sysml +0 -15
  265. package/examples/gpca-pump/gpca-pump.kpar +0 -0
  266. /package/{examples/extensions → extensions}/clinical/memo.package.yaml +0 -0
  267. /package/{examples/extensions → extensions}/clinical/src/clinical_extension.sysml +0 -0
  268. /package/{examples/extensions → extensions}/clinical/src/methodology/clinical_methodology.sysml +0 -0
  269. /package/{examples/extensions → extensions}/clinical/src/procedures/memo_clinical_procedures.sysml +0 -0
  270. /package/{examples/extensions → extensions}/template/memo.package.yaml +0 -0
@@ -10,7 +10,7 @@ package memo_rules_closure {
10
10
  // ─── Risk Layer Rules ────────────────────────────────────────────────
11
11
 
12
12
  constraint def HazardMitigationRule :> MemoConsistencyRule {
13
- attribute id = "CR-MED-001";
13
+ attribute :>> id = "CR-MED-001";
14
14
  attribute tailoring = RuleTailoringKind::assurance;
15
15
  attribute appliesTo = "Hazard";
16
16
  attribute severity = RuleSeverityKind::error;
@@ -20,7 +20,7 @@ package memo_rules_closure {
20
20
  }
21
21
 
22
22
  constraint def HazardSeverityRule :> MemoConsistencyRule {
23
- attribute id = "CR-MED-002";
23
+ attribute :>> id = "CR-MED-002";
24
24
  attribute tailoring = RuleTailoringKind::assurance;
25
25
  attribute appliesTo = "Hazard";
26
26
  attribute severity = RuleSeverityKind::error;
@@ -30,7 +30,7 @@ package memo_rules_closure {
30
30
  }
31
31
 
32
32
  constraint def RiskControlVerificationRule :> MemoConsistencyRule {
33
- attribute id = "CR-MED-003";
33
+ attribute :>> id = "CR-MED-003";
34
34
  attribute tailoring = RuleTailoringKind::assurance;
35
35
  attribute appliesTo = "RiskControlMeasure";
36
36
  attribute severity = RuleSeverityKind::error;
@@ -40,7 +40,7 @@ package memo_rules_closure {
40
40
  }
41
41
 
42
42
  constraint def InitialRiskMatrixRule :> MemoConsistencyRule {
43
- attribute id = "CR-MED-004";
43
+ attribute :>> id = "CR-MED-004";
44
44
  attribute tailoring = RuleTailoringKind::assurance;
45
45
  attribute appliesTo = "Risk";
46
46
  attribute severity = RuleSeverityKind::warning;
@@ -52,7 +52,7 @@ package memo_rules_closure {
52
52
  // ─── Requirements Layer Rules ────────────────────────────────────────
53
53
 
54
54
  constraint def SysReqTraceRule :> MemoConsistencyRule {
55
- attribute id = "CR-MED-010";
55
+ attribute :>> id = "CR-MED-010";
56
56
  attribute tailoring = RuleTailoringKind::assurance;
57
57
  attribute appliesTo = "Requirement[requirementKind=system]";
58
58
  attribute severity = RuleSeverityKind::error;
@@ -62,7 +62,7 @@ package memo_rules_closure {
62
62
  }
63
63
 
64
64
  constraint def SwReqTraceRule :> MemoConsistencyRule {
65
- attribute id = "CR-MED-011";
65
+ attribute :>> id = "CR-MED-011";
66
66
  attribute tailoring = RuleTailoringKind::assurance;
67
67
  attribute appliesTo = "Requirement[requirementKind=software]";
68
68
  attribute severity = RuleSeverityKind::error;
@@ -80,7 +80,7 @@ package memo_rules_closure {
80
80
  // ─── Architecture Layer Rules ────────────────────────────────────────
81
81
 
82
82
  constraint def SwComponentSafetyClassRule :> MemoConsistencyRule {
83
- attribute id = "CR-MED-020";
83
+ attribute :>> id = "CR-MED-020";
84
84
  attribute tailoring = RuleTailoringKind::assurance;
85
85
  attribute appliesTo = "SoftwareModule";
86
86
  attribute severity = RuleSeverityKind::error;
@@ -90,7 +90,7 @@ package memo_rules_closure {
90
90
  }
91
91
 
92
92
  constraint def SwComponentReqRule :> MemoConsistencyRule {
93
- attribute id = "CR-MED-021";
93
+ attribute :>> id = "CR-MED-021";
94
94
  attribute tailoring = RuleTailoringKind::assurance;
95
95
  attribute appliesTo = "SoftwareModule";
96
96
  attribute severity = RuleSeverityKind::warning;
@@ -100,7 +100,7 @@ package memo_rules_closure {
100
100
  }
101
101
 
102
102
  constraint def LogicalFunctionAllocationRule :> MemoConsistencyRule {
103
- attribute id = "CR-MED-022";
103
+ attribute :>> id = "CR-MED-022";
104
104
  attribute tailoring = RuleTailoringKind::assurance;
105
105
  attribute appliesTo = "SystemFunction";
106
106
  attribute severity = RuleSeverityKind::warning;
@@ -112,7 +112,7 @@ package memo_rules_closure {
112
112
  // ─── Verification Layer Rules ────────────────────────────────────────
113
113
 
114
114
  constraint def VerificationCaseMethodRule :> MemoConsistencyRule {
115
- attribute id = "CR-MED-030";
115
+ attribute :>> id = "CR-MED-030";
116
116
  attribute tailoring = RuleTailoringKind::assurance;
117
117
  attribute appliesTo = "VerificationCase";
118
118
  attribute severity = RuleSeverityKind::error;
@@ -122,7 +122,7 @@ package memo_rules_closure {
122
122
  }
123
123
 
124
124
  constraint def VerificationCaseTargetRule :> MemoConsistencyRule {
125
- attribute id = "CR-MED-031";
125
+ attribute :>> id = "CR-MED-031";
126
126
  attribute tailoring = RuleTailoringKind::assurance;
127
127
  attribute appliesTo = "VerificationCase";
128
128
  attribute severity = RuleSeverityKind::error;
@@ -132,7 +132,7 @@ package memo_rules_closure {
132
132
  }
133
133
 
134
134
  constraint def EvidenceProductionRule :> MemoConsistencyRule {
135
- attribute id = "CR-MED-032";
135
+ attribute :>> id = "CR-MED-032";
136
136
  attribute tailoring = RuleTailoringKind::assurance;
137
137
  attribute appliesTo = "VerificationCase";
138
138
  attribute severity = RuleSeverityKind::warning;
@@ -144,7 +144,7 @@ package memo_rules_closure {
144
144
  // ─── Cybersecurity Layer Rules ───────────────────────────────────────
145
145
 
146
146
  constraint def ThreatMitigationRule :> MemoConsistencyRule {
147
- attribute id = "CR-MED-040";
147
+ attribute :>> id = "CR-MED-040";
148
148
  attribute tailoring = RuleTailoringKind::assurance;
149
149
  attribute appliesTo = "Threat";
150
150
  attribute severity = RuleSeverityKind::error;
@@ -154,7 +154,7 @@ package memo_rules_closure {
154
154
  }
155
155
 
156
156
  constraint def AssetThreatLinkRule :> MemoConsistencyRule {
157
- attribute id = "CR-MED-041";
157
+ attribute :>> id = "CR-MED-041";
158
158
  attribute tailoring = RuleTailoringKind::assurance;
159
159
  attribute appliesTo = "CybersecurityAsset";
160
160
  attribute severity = RuleSeverityKind::warning;
@@ -166,7 +166,7 @@ package memo_rules_closure {
166
166
  // ─── Interface Rules ─────────────────────────────────────────────────
167
167
 
168
168
  constraint def LogicalInterfaceDirectionRule :> MemoConsistencyRule {
169
- attribute id = "CR-MED-050";
169
+ attribute :>> id = "CR-MED-050";
170
170
  attribute tailoring = RuleTailoringKind::assurance;
171
171
  attribute appliesTo = "Interface";
172
172
  attribute severity = RuleSeverityKind::error;
@@ -178,7 +178,7 @@ package memo_rules_closure {
178
178
  // ─── Conditional Rules ───────────────────────────────────────────────
179
179
 
180
180
  constraint def SafetyClassCVerificationRule :> MemoConsistencyRule {
181
- attribute id = "CR-MED-101";
181
+ attribute :>> id = "CR-MED-101";
182
182
  attribute tailoring = RuleTailoringKind::assurance;
183
183
  attribute appliesTo = "SoftwareModule";
184
184
  attribute severity = RuleSeverityKind::error;
@@ -203,7 +203,7 @@ package memo_rules_closure {
203
203
  // triggers. Chrome must be DECLARED `decoration`; an element left
204
204
  // unclassified fails rather than passing as scenery.
205
205
  constraint def UiElementDesignRecordRule :> MemoConsistencyRule {
206
- attribute id = "CR-MED-110";
206
+ attribute :>> id = "CR-MED-110";
207
207
  attribute tailoring = RuleTailoringKind::assurance;
208
208
  attribute appliesTo = "UIElement";
209
209
  attribute severity = RuleSeverityKind::error;
@@ -217,7 +217,7 @@ package memo_rules_closure {
217
217
  // The interactive-form restriction lives in the predicate because it spans
218
218
  // several enum values.
219
219
  constraint def ControlInvokesFunctionRule :> MemoConsistencyRule {
220
- attribute id = "CR-MED-111";
220
+ attribute :>> id = "CR-MED-111";
221
221
  attribute tailoring = RuleTailoringKind::assurance;
222
222
  attribute appliesTo = "UIElement";
223
223
  attribute severity = RuleSeverityKind::warning;
@@ -230,7 +230,7 @@ package memo_rules_closure {
230
230
  // unconfirmed machine guess must never reach a design review looking like
231
231
  // an engineering decision.
232
232
  constraint def BoundsDetectionConfirmedRule :> MemoConsistencyRule {
233
- attribute id = "CR-MED-112";
233
+ attribute :>> id = "CR-MED-112";
234
234
  attribute tailoring = RuleTailoringKind::assurance;
235
235
  attribute appliesTo = "UIElement";
236
236
  attribute severity = RuleSeverityKind::warning;
@@ -242,7 +242,7 @@ package memo_rules_closure {
242
242
  // A screenshot with no build behind it is undated design intent, not
243
243
  // evidence of what the device does.
244
244
  constraint def ScreenCaptureProvenanceRule :> MemoConsistencyRule {
245
- attribute id = "CR-MED-113";
245
+ attribute :>> id = "CR-MED-113";
246
246
  attribute tailoring = RuleTailoringKind::assurance;
247
247
  attribute appliesTo = "ScreenCapture";
248
248
  attribute severity = RuleSeverityKind::error;
@@ -7,7 +7,7 @@ package memo_rules_crosslayer {
7
7
  private import memo_core_enumerations::*;
8
8
 
9
9
  constraint def RiskToReqTraceRule :> MemoConsistencyRule {
10
- attribute id = "XL-001";
10
+ attribute :>> id = "XL-001";
11
11
  attribute tailoring = RuleTailoringKind::assurance;
12
12
  attribute appliesTo = "Hazard";
13
13
  attribute severity = RuleSeverityKind::warning;
@@ -17,7 +17,7 @@ package memo_rules_crosslayer {
17
17
  }
18
18
 
19
19
  constraint def ReqToArchTraceRule :> MemoConsistencyRule {
20
- attribute id = "XL-002";
20
+ attribute :>> id = "XL-002";
21
21
  attribute tailoring = RuleTailoringKind::assurance;
22
22
  attribute appliesTo = "Requirement[requirementKind=system]";
23
23
  attribute severity = RuleSeverityKind::warning;
@@ -12,7 +12,7 @@ package memo_rules_ontology {
12
12
  // ─── Structure ───────────────────────────────────────────────────────
13
13
 
14
14
  constraint def ContainmentAcyclicRule :> MemoConsistencyRule {
15
- attribute id = "CR-ONT-001";
15
+ attribute :>> id = "CR-ONT-001";
16
16
  attribute tailoring = RuleTailoringKind::invariant;
17
17
  attribute appliesTo = "Model";
18
18
  attribute severity = RuleSeverityKind::error;
@@ -21,7 +21,7 @@ package memo_rules_ontology {
21
21
  constraint { true }
22
22
  }
23
23
  constraint def NestedPartConnectedRule :> MemoConsistencyRule {
24
- attribute id = "AR-IBD-001";
24
+ attribute :>> id = "AR-IBD-001";
25
25
  attribute tailoring = RuleTailoringKind::invariant;
26
26
  // Internal-block connectivity is a structural-architecture concern, so
27
27
  // the subject is the structural component — not every MemoPart. UI
@@ -44,7 +44,7 @@ package memo_rules_ontology {
44
44
  // ─── Deployment and realization ──────────────────────────────────────
45
45
 
46
46
  constraint def RuntimeTracesToModuleRule :> MemoConsistencyRule {
47
- attribute id = "CR-ONT-011";
47
+ attribute :>> id = "CR-ONT-011";
48
48
  attribute tailoring = RuleTailoringKind::invariant;
49
49
  attribute appliesTo = "SoftwareComponent";
50
50
  attribute severity = RuleSeverityKind::warning;
@@ -53,7 +53,7 @@ package memo_rules_ontology {
53
53
  constraint { true }
54
54
  }
55
55
  constraint def PatientContactCharacterizedRule :> MemoConsistencyRule {
56
- attribute id = "CR-ONT-032";
56
+ attribute :>> id = "CR-ONT-032";
57
57
  attribute tailoring = RuleTailoringKind::invariant;
58
58
  attribute appliesTo = "PhysicalComponent";
59
59
  attribute severity = RuleSeverityKind::error;
@@ -65,25 +65,25 @@ package memo_rules_ontology {
65
65
  // ─── Assurance coverage ──────────────────────────────────────────────
66
66
 
67
67
  constraint def SafetyCriticalFunctionVerifiedRule :> MemoConsistencyRule {
68
- attribute id = "CR-ONT-040";
68
+ attribute :>> id = "CR-ONT-040";
69
69
  attribute tailoring = RuleTailoringKind::invariant;
70
- attribute appliesTo = "SystemFunction";
70
+ attribute appliesTo = "MemoFunction";
71
71
  attribute severity = RuleSeverityKind::error;
72
72
  attribute rationaleText = "Safety-critical functions (criticality high or catastrophic) must trace to at least one verification case.";
73
73
  attribute predicateExpression = "not(criticality == 'high' or criticality == 'catastrophic') or verifiedBy->size() >= 1";
74
74
  constraint { true }
75
75
  }
76
76
  constraint def CriticalTaskValidatedRule :> MemoConsistencyRule {
77
- attribute id = "CR-ONT-041";
77
+ attribute :>> id = "CR-ONT-041";
78
78
  attribute tailoring = RuleTailoringKind::invariant;
79
- attribute appliesTo = "UserTask[criticality=high]";
79
+ attribute appliesTo = "OperativeAction[criticality=high]";
80
80
  attribute severity = RuleSeverityKind::error;
81
81
  attribute rationaleText = "Critical tasks (criticality high or catastrophic) must trace to usability validation (FDA HF guidance; IEC 62366-1 summative evaluation).";
82
82
  attribute predicateExpression = "not(criticality == 'high' or criticality == 'catastrophic') or validates->size() >= 1";
83
83
  constraint { true }
84
84
  }
85
85
  constraint def UseErrorTracesToHazardRule :> MemoConsistencyRule {
86
- attribute id = "CR-ONT-042";
86
+ attribute :>> id = "CR-ONT-042";
87
87
  attribute tailoring = RuleTailoringKind::invariant;
88
88
  attribute appliesTo = "UseError";
89
89
  attribute severity = RuleSeverityKind::warning;
@@ -91,10 +91,222 @@ package memo_rules_ontology {
91
91
  attribute predicateExpression = "not(severity == 'serious' or severity == 'critical' or severity == 'catastrophic') or causes->size() >= 1 or tracesRisk->size() >= 1";
92
92
  constraint { true }
93
93
  }
94
+ // ─── Relation end conformance (Track A0) ─────────────────────────────
95
+ //
96
+ // These rules carry the constraints that `connection def` end TYPES used to
97
+ // carry in memo_core_relationships. The types had to go: KerML forbids a
98
+ // port or a behaviour from specializing a part-based type, so a
99
+ // `MemoPart`-typed end forced every endpoint to be a part — which is why
100
+ // ports are part defs, why a function is a part with its behaviour stapled
101
+ // on, and why `allocate <function> to <actor>` is rejected. See the Track A0
102
+ // note at the top of memo_core_relationships.
103
+ //
104
+ // Each rule states what its end stated, in the one vocabulary that survives
105
+ // the metaclass split:
106
+ //
107
+ // * `conformsTo(Base)` — SysML specialization against a MEMO base. This is
108
+ // the part the end type expressed, and it still works within a metaclass.
109
+ // * `construct == 'action' | 'port' | 'state' | …` — the SysML METACLASS.
110
+ // No MEMO base can say this, because the bases are per-metaclass by
111
+ // construction; a type-based end could only ever admit one of them.
112
+ //
113
+ // Several of these are WIDER than the end they replace, and deliberately so:
114
+ // the ends were being violated by content that already shipped. `composes`
115
+ // was typed MemoPart/MemoPart and links StateMachine (a state def) to
116
+ // OperativeAction (an action def); `verifiedBy`'s source was typed MemoPart and
117
+ // most of its sources are requirement defs; `precedes` was typed
118
+ // a part-only type and joins OperativeAction to OperativeAction.
119
+ // A rule that reproduced the old type exactly would have failed on the
120
+ // flagship example on the day it landed. What each rule asserts is the
121
+ // constraint the end MEANT, stated so it can be checked.
122
+ //
123
+ // Subject scope is `Model`, following CR-ONT-001: a statement about the ends
124
+ // of a relation quantifies over its LINKS, not over elements of one kind, so
125
+ // no per-element subject can reach it. The cost is that a violation names
126
+ // the rule and not the offending link; the rationale text names the relation
127
+ // and the admissible types so the report is still actionable.
128
+
129
+ constraint def SatisfiedBySourceKindRule :> MemoConsistencyRule {
130
+ attribute :>> id = "CR-ONT-060";
131
+ attribute tailoring = RuleTailoringKind::invariant;
132
+ attribute appliesTo = "Model";
133
+ attribute severity = RuleSeverityKind::error;
134
+ attribute rationaleText = "Only a requirement or a need is satisfied by something. The source end of SatisfiedBy must conform to MemoRequirementElement.";
135
+ attribute predicateExpression = "sourcesOf(satisfiedBy)->forAll(conformsTo(MemoRequirementElement))";
136
+ constraint { true }
137
+ }
138
+ constraint def SatisfiedByTargetKindRule :> MemoConsistencyRule {
139
+ attribute :>> id = "CR-ONT-061";
140
+ attribute tailoring = RuleTailoringKind::invariant;
141
+ attribute appliesTo = "Model";
142
+ attribute severity = RuleSeverityKind::error;
143
+ attribute rationaleText = "A requirement is satisfied by a designed part, a behaviour, or a port. Never by another requirement or by a document.";
144
+ attribute predicateExpression = "targetsOf(satisfiedBy)->forAll(conformsTo(MemoPart) or construct == 'action' or construct == 'port')";
145
+ constraint { true }
146
+ }
147
+ constraint def VerifiedByTargetKindRule :> MemoConsistencyRule {
148
+ attribute :>> id = "CR-ONT-062";
149
+ attribute tailoring = RuleTailoringKind::invariant;
150
+ attribute appliesTo = "Model";
151
+ attribute severity = RuleSeverityKind::error;
152
+ attribute rationaleText = "A verification case verifies a requirement, a risk control, an architecture element, a behaviour, or a port — something a test can be run against. Not a view, not an evidence record.";
153
+ attribute predicateExpression = "sourcesOf(verifiedBy)->forAll(conformsTo(MemoPart) or construct == 'requirement' or construct == 'action' or construct == 'port')";
154
+ constraint { true }
155
+ }
156
+ constraint def AllocatedToSourceKindRule :> MemoConsistencyRule {
157
+ attribute :>> id = "CR-ONT-063";
158
+ attribute tailoring = RuleTailoringKind::invariant;
159
+ attribute appliesTo = "Model";
160
+ attribute severity = RuleSeverityKind::error;
161
+ attribute rationaleText = "Allocation runs from a function or a behaviour to where it runs. The source end of AllocatedTo is a part or an action.";
162
+ attribute predicateExpression = "sourcesOf(allocatedTo)->forAll(conformsTo(MemoPart) or construct == 'action')";
163
+ constraint { true }
164
+ }
165
+ constraint def AllocatedToTargetKindRule :> MemoConsistencyRule {
166
+ attribute :>> id = "CR-ONT-064";
167
+ attribute tailoring = RuleTailoringKind::invariant;
168
+ attribute appliesTo = "Model";
169
+ attribute severity = RuleSeverityKind::error;
170
+ attribute rationaleText = "A function is allocated to a part — including a system or actor — as ARCADIA System Analysis requires.";
171
+ attribute predicateExpression = "targetsOf(allocatedTo)->forAll(conformsTo(MemoPart))";
172
+ constraint { true }
173
+ }
174
+ constraint def ComposesParentKindRule :> MemoConsistencyRule {
175
+ attribute :>> id = "CR-ONT-065";
176
+ attribute tailoring = RuleTailoringKind::invariant;
177
+ attribute appliesTo = "Model";
178
+ attribute severity = RuleSeverityKind::error;
179
+ attribute rationaleText = "A whole in a decomposition is a part, a behaviour, or a state machine. A requirement does not compose anything.";
180
+ attribute predicateExpression = "sourcesOf(composes)->forAll(conformsTo(MemoPart) or construct == 'action' or construct == 'state')";
181
+ constraint { true }
182
+ }
183
+ constraint def ComposesChildKindRule :> MemoConsistencyRule {
184
+ attribute :>> id = "CR-ONT-066";
185
+ attribute tailoring = RuleTailoringKind::invariant;
186
+ attribute appliesTo = "Model";
187
+ attribute severity = RuleSeverityKind::error;
188
+ attribute rationaleText = "A part in a decomposition is a part, a behaviour, a state, or a port — a component owns its ports, and a workflow owns its steps.";
189
+ attribute predicateExpression = "targetsOf(composes)->forAll(conformsTo(MemoPart) or construct == 'action' or construct == 'state' or construct == 'port')";
190
+ constraint { true }
191
+ }
192
+ constraint def PrecedesEndKindRule :> MemoConsistencyRule {
193
+ attribute :>> id = "CR-ONT-067";
194
+ attribute tailoring = RuleTailoringKind::invariant;
195
+ attribute appliesTo = "Model";
196
+ attribute severity = RuleSeverityKind::error;
197
+ attribute rationaleText = "Precedence orders things that happen: parts or behaviours, at both ends.";
198
+ attribute predicateExpression = "sourcesOf(precedes)->forAll(conformsTo(MemoPart) or construct == 'action') and targetsOf(precedes)->forAll(conformsTo(MemoPart) or construct == 'action')";
199
+ constraint { true }
200
+ }
201
+ constraint def PerformsPerformerKindRule :> MemoConsistencyRule {
202
+ attribute :>> id = "CR-ONT-068";
203
+ attribute tailoring = RuleTailoringKind::invariant;
204
+ attribute appliesTo = "Model";
205
+ attribute severity = RuleSeverityKind::error;
206
+ attribute rationaleText = "A performer is an operational entity, an actor, or a system action — a part or a behaviour. The end's own documentation said 'or system action' while its MemoPart type forbade one.";
207
+ attribute predicateExpression = "sourcesOf(performs)->forAll(conformsTo(MemoPart) or construct == 'action')";
208
+ constraint { true }
209
+ }
210
+ constraint def EnablesEnablerKindRule :> MemoConsistencyRule {
211
+ attribute :>> id = "CR-ONT-069";
212
+ attribute tailoring = RuleTailoringKind::invariant;
213
+ attribute appliesTo = "Model";
214
+ attribute severity = RuleSeverityKind::error;
215
+ attribute rationaleText = "An enabling system or function enables a workflow: the enabling end is a part or a behaviour.";
216
+ attribute predicateExpression = "sourcesOf(enables)->forAll(conformsTo(MemoPart) or construct == 'action')";
217
+ constraint { true }
218
+ }
219
+ constraint def BindsToInterfaceEndKindRule :> MemoConsistencyRule {
220
+ attribute :>> id = "CR-ONT-070";
221
+ attribute tailoring = RuleTailoringKind::invariant;
222
+ attribute appliesTo = "Model";
223
+ attribute severity = RuleSeverityKind::error;
224
+ attribute rationaleText = "A port binds to an interface. The bound end is an interface definition, which the former InterfaceElement-typed end could not hold at all — Interface specializes MemoInterface, an interface def, not a part.";
225
+ attribute predicateExpression = "sourcesOf(bindsToInterface)->forAll(conformsTo(InterfaceElement) or construct == 'port') and targetsOf(bindsToInterface)->forAll(conformsTo(InterfaceElement) or construct == 'interface' or construct == 'port')";
226
+ constraint { true }
227
+ }
228
+ constraint def CrossesTrustBoundaryEndKindRule :> MemoConsistencyRule {
229
+ attribute :>> id = "CR-ONT-071";
230
+ attribute tailoring = RuleTailoringKind::invariant;
231
+ attribute appliesTo = "Model";
232
+ attribute severity = RuleSeverityKind::error;
233
+ attribute rationaleText = "A boundary is a boundary element or a port; what crosses it is an asset or an exchange item.";
234
+ attribute predicateExpression = "sourcesOf(crossesTrustBoundary)->forAll(conformsTo(InterfaceElement) or construct == 'port') and targetsOf(crossesTrustBoundary)->forAll(conformsTo(MemoPart) or construct == 'item')";
235
+ constraint { true }
236
+ }
237
+
238
+ // CR-ONT-002's replacement. ComponentExchange's endpoints are `ref`
239
+ // features, not links, and the builder projects them as element-ID STRINGS
240
+ // in the attribute map (a §13.3 string pseudo-reference) — so they cannot be
241
+ // reached with sourcesOf/targetsOf. They are resolved here by looking the id
242
+ // up in the kind extent, which is the same statement made the long way.
243
+ constraint def ComponentExchangeSourceEndpointKindRule :> MemoConsistencyRule {
244
+ attribute :>> id = "CR-ONT-072";
245
+ attribute tailoring = RuleTailoringKind::invariant;
246
+ attribute appliesTo = "ComponentExchange";
247
+ attribute severity = RuleSeverityKind::error;
248
+ attribute rationaleText = "An exchange starts at a component or at a boundary port. Stating it as a rule is what let the endpoint refs stop being MemoPart-typed, which is what lets PhysicalPort and SoftwarePort become port defs.";
249
+ attribute predicateExpression = "attributes.sourceEndpoint == '' or allOfKind('MemoPart')->exists(id == subject.attributes.sourceEndpoint) or allOfKind('InterfaceElement')->exists(id == subject.attributes.sourceEndpoint) or allOfKind('MemoPort')->exists(id == subject.attributes.sourceEndpoint)";
250
+ constraint { true }
251
+ }
252
+ constraint def ComponentExchangeTargetEndpointKindRule :> MemoConsistencyRule {
253
+ attribute :>> id = "CR-ONT-073";
254
+ attribute tailoring = RuleTailoringKind::invariant;
255
+ attribute appliesTo = "ComponentExchange";
256
+ attribute severity = RuleSeverityKind::error;
257
+ attribute rationaleText = "An exchange ends at a component or at a boundary port, on the same grounds as CR-ONT-072.";
258
+ attribute predicateExpression = "attributes.targetEndpoint == '' or allOfKind('MemoPart')->exists(id == subject.attributes.targetEndpoint) or allOfKind('InterfaceElement')->exists(id == subject.attributes.targetEndpoint) or allOfKind('MemoPort')->exists(id == subject.attributes.targetEndpoint)";
259
+ constraint { true }
260
+ }
261
+
262
+ // ─── The functional chain ────────────────────────────────────────────
263
+ //
264
+ // What makes ComponentFunction a definition of its own rather than an enum
265
+ // member on SystemFunction. An enum value cannot change a multiplicity, and
266
+ // "answerable to exactly one component" is the whole content of the concept.
267
+
268
+ constraint def ComponentFunctionAllocatedRule :> MemoConsistencyRule {
269
+ attribute :>> id = "CR-ONT-074";
270
+ attribute tailoring = RuleTailoringKind::invariant;
271
+ attribute appliesTo = "ComponentFunction";
272
+ attribute severity = RuleSeverityKind::error;
273
+ attribute rationaleText = "A component function is the responsibility of exactly one component, and AllocatedTo is what names it. A component function allocated nowhere is a responsibility nobody has accepted; one allocated twice is a responsibility nobody owns. A system-level responsibility with no single owner is a SystemFunction, which allows that.";
274
+ attribute predicateExpression = "allocatedTo->size() == 1";
275
+ constraint { true }
276
+ }
277
+ constraint def FunctionDecomposesIntoFunctionsRule :> MemoConsistencyRule {
278
+ attribute :>> id = "CR-ONT-075";
279
+ attribute tailoring = RuleTailoringKind::invariant;
280
+ attribute appliesTo = "MemoFunction";
281
+ attribute severity = RuleSeverityKind::error;
282
+ attribute rationaleText = "The functional chain decomposes functions into functions. A function composed of a component, or owned by one, is confusing allocation with decomposition — the component is named by AllocatedTo, never by Composes.";
283
+ attribute predicateExpression = "composes->forAll(conformsTo(MemoFunction))";
284
+ constraint { true }
285
+ }
286
+
287
+ // Track A3. The flow is the edge; the exchange part carries the budget and
288
+ // assurance attributes. The two halves are bound by a SHARED NAME — the flow
289
+ // usage is named with its exchange — and this is what makes that binding a
290
+ // checked fact rather than a convention someone can quietly break.
291
+ //
292
+ // It needs `linksOf`, because the question is about a link's IDENTITY, not
293
+ // about what sits at its ends: `sourcesOf`/`targetsOf` yield the elements at
294
+ // the ends and can never answer it. Naming the flow is what the grammar's
295
+ // restored FlowDeclaration name makes possible at all.
296
+ constraint def ExchangeHasFlowRule :> MemoConsistencyRule {
297
+ attribute :>> id = "CR-ONT-076";
298
+ attribute tailoring = RuleTailoringKind::invariant;
299
+ attribute appliesTo = "ComponentExchange";
300
+ attribute severity = RuleSeverityKind::error;
301
+ attribute rationaleText = "An exchange states that something crosses a boundary, which is an EDGE, and the edge is a native flow. The part def exists for the budget and assurance attributes a reader has to find from the edge, so the two are named alike and this rule holds them together. An exchange with no flow is a budget attached to nothing.";
302
+ attribute predicateExpression = "linksOf(flow)->exists(id == subject.id)";
303
+ constraint { true }
304
+ }
305
+
94
306
  constraint def AlternateScenarioHasBaseRule :> MemoConsistencyRule {
95
- attribute id = "CR-ONT-043";
307
+ attribute :>> id = "CR-ONT-043";
96
308
  attribute tailoring = RuleTailoringKind::invariant;
97
- attribute appliesTo = "MemoScenario";
309
+ attribute appliesTo = "OperativeScenario";
98
310
  attribute severity = RuleSeverityKind::error;
99
311
  attribute rationaleText = "Alternate, exception, and recovery scenarios must identify their base scenario or variation point — never duplicate the workflow.";
100
312
  attribute predicateExpression = "not(variantKind == 'alternate' or variantKind == 'exception' or variantKind == 'recovery') or baseScenario->size() == 1 or variationPoint != ''";
@@ -7,7 +7,7 @@ package memo_rules_quantitative {
7
7
  private import memo_core_enumerations::*;
8
8
 
9
9
  constraint def HazardMaxControlsRule :> MemoConsistencyRule {
10
- attribute id = "QT-001";
10
+ attribute :>> id = "QT-001";
11
11
  attribute tailoring = RuleTailoringKind::assurance;
12
12
  attribute appliesTo = "Hazard";
13
13
  attribute severity = RuleSeverityKind::info;
@@ -17,7 +17,7 @@ package memo_rules_quantitative {
17
17
  }
18
18
 
19
19
  constraint def SwComponentMaxInterfacesRule :> MemoConsistencyRule {
20
- attribute id = "QT-002";
20
+ attribute :>> id = "QT-002";
21
21
  attribute tailoring = RuleTailoringKind::assurance;
22
22
  attribute appliesTo = "SoftwareModule";
23
23
  attribute severity = RuleSeverityKind::info;