@memoarchitect/ontology 0.8.24 → 0.10.9

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 (182) hide show
  1. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +9 -7
  2. package/examples/connected-patient-monitor/model/catalog/project.sysml +3 -1
  3. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +9 -7
  4. package/examples/embedded-infusion-pump/model/catalog/project.sysml +3 -1
  5. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +8 -6
  6. package/examples/functional-logical-physical/model/catalog/project.sysml +3 -1
  7. package/examples/gpca-pump/memo.identity.yaml +2179 -0
  8. package/examples/gpca-pump/methodology/gpca_profiles.sysml +3 -1
  9. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +29 -27
  10. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +115 -114
  11. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +42 -41
  12. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +26 -25
  13. package/examples/gpca-pump/model/catalog/gpca_context.sysml +22 -20
  14. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +14 -13
  15. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +42 -40
  16. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +198 -197
  17. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +121 -125
  18. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +8 -6
  19. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +290 -288
  20. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +164 -163
  21. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +44 -43
  22. package/examples/gpca-pump/model/catalog/gpca_system.sysml +15 -14
  23. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +10 -8
  24. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +62 -61
  25. package/examples/gpca-pump/model/catalog/project.sysml +3 -1
  26. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +6 -4
  27. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +5 -3
  28. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +5 -3
  29. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +5 -3
  30. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +5 -3
  31. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +5 -3
  32. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +5 -3
  33. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +5 -3
  34. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +5 -3
  35. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +5 -3
  36. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +5 -3
  37. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +5 -3
  38. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +5 -3
  39. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +5 -3
  40. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +5 -3
  41. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +5 -3
  42. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +5 -3
  43. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +5 -3
  44. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +5 -3
  45. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +5 -3
  46. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +5 -3
  47. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +5 -3
  48. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +5 -3
  49. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +6 -4
  50. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +5 -3
  51. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +5 -3
  52. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +9 -7
  53. package/examples/ivd-laboratory-system/model/catalog/project.sysml +3 -1
  54. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +6 -4
  55. package/examples/manual-surgical-instrument/model/catalog/project.sysml +3 -1
  56. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -4
  57. package/examples/multidimensional-layers/model/catalog/project.sysml +3 -1
  58. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +20 -18
  59. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +20 -18
  60. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +6 -4
  61. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +9 -7
  62. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +18 -16
  63. package/examples/nested-architecture-dsm/model/catalog/project.sysml +3 -1
  64. package/examples/reusable-instrument/model/catalog/project.sysml +3 -1
  65. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +17 -16
  66. package/examples/ros-mobile-robot/model/catalog/project.sysml +3 -1
  67. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +18 -16
  68. package/examples/software-only-medical-device/model/catalog/project.sysml +3 -1
  69. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +10 -8
  70. package/examples/surgical-closure-workflow/model/catalog/project.sysml +3 -1
  71. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +51 -51
  72. package/examples/surgical-robot/model/catalog/project.sysml +3 -1
  73. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +9 -7
  74. package/examples/sysml-diagram-samples/model/catalog/project.sysml +3 -1
  75. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +10 -8
  76. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +7 -5
  77. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +3 -1
  78. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +2 -1
  79. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +3 -1
  80. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +8 -6
  81. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +3 -1
  82. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +2 -1
  83. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +3 -1
  84. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +11 -7
  85. package/examples/temperature-alarm/memo.identity.yaml +64 -0
  86. package/examples/temperature-alarm/model/catalog/project.sysml +3 -1
  87. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +27 -22
  88. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +14 -12
  89. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +35 -33
  90. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +8 -6
  91. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +14 -13
  92. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +4 -2
  93. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +4 -2
  94. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +12 -10
  95. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +3 -1
  96. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +14 -12
  97. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +17 -15
  98. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +10 -9
  99. package/examples/ui-screen-regions/model/catalog/project.sysml +3 -1
  100. package/examples/ui-screen-regions/model/catalog/relationships.sysml +2 -2
  101. package/examples/ui-screen-regions/model/catalog/traces.sysml +0 -2
  102. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +5 -3
  103. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +5 -3
  104. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +5 -3
  105. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +3 -1
  106. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +3 -1
  107. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +3 -1
  108. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +23 -21
  109. package/extensions/aadl/src/methodology/aadl_methodology.sysml +3 -1
  110. package/extensions/clinical/src/methodology/clinical_methodology.sysml +3 -1
  111. package/extensions/cloud/src/methodology/cloud_methodology.sysml +3 -1
  112. package/extensions/container/src/methodology/container_methodology.sysml +3 -1
  113. package/extensions/messaging/src/methodology/messaging_methodology.sysml +3 -1
  114. package/extensions/ros/src/methodology/ros_methodology.sysml +3 -1
  115. package/extensions/template/src/extension.sysml +3 -1
  116. package/package.json +2 -2
  117. package/src/architecture/functional/behavior/memo_behavior.sysml +1 -1
  118. package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +12 -2
  119. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +0 -11
  120. package/src/architecture/implementation/ui/memo_ui.sysml +0 -23
  121. package/src/architecture/logical/interfaces/memo_interfaces.sysml +3 -1
  122. package/src/architecture/operational/context/use_context/memo_use_context.sysml +3 -11
  123. package/src/architecture/operational/scenarios/memo_scenarios.sysml +0 -10
  124. package/src/architecture/operational/use_cases/memo_use_cases.sysml +7 -11
  125. package/src/architecture/operational/workflows/memo_workflows.sysml +0 -20
  126. package/src/architecture/realization/deployment/memo_deployment.sysml +16 -9
  127. package/src/architecture/realization/physical/memo_physical_architecture.sysml +8 -2
  128. package/src/artifacts/standards/cfr_21_820.sysml +80 -89
  129. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +45 -49
  130. package/src/artifacts/standards/iec_60601_1.sysml +108 -121
  131. package/src/artifacts/standards/iec_60601_1_2.sysml +31 -33
  132. package/src/artifacts/standards/iec_60812.sysml +21 -22
  133. package/src/artifacts/standards/iec_62304.sysml +150 -169
  134. package/src/artifacts/standards/iec_62366_1.sysml +80 -89
  135. package/src/artifacts/standards/iec_81001_5_1.sysml +52 -57
  136. package/src/artifacts/standards/iso_13485.sysml +80 -89
  137. package/src/artifacts/standards/iso_14971.sysml +66 -73
  138. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +15 -15
  139. package/src/assurance/verification_validation/memo_assurance.sysml +7 -12
  140. package/src/core/common/memo_common.sysml +50 -50
  141. package/src/core/enumerations/memo_enumerations.sysml +1 -1
  142. package/src/core/relationships/memo_relationships.sysml +22 -49
  143. package/src/methodology/archetypes/memo_archetypes.sysml +10 -8
  144. package/src/methodology/core/memo_core.sysml +0 -10
  145. package/src/methodology/profiles/memo_profiles.sysml +18 -16
  146. package/src/rules/closure/closure_rules.sysml +22 -20
  147. package/src/rules/crosslayer/cross_layer_rules.sysml +4 -2
  148. package/src/rules/ontology/ontology_invariants.sysml +106 -33
  149. package/src/rules/quantitative/quantitative_rules.sysml +4 -2
  150. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +29 -28
  151. package/src/viewpoints/clinical/clinical_viewpoint.sysml +4 -2
  152. package/src/viewpoints/context/context_viewpoint.sysml +5 -3
  153. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +5 -3
  154. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -2
  155. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +6 -16
  156. package/src/viewpoints/functional/functional_viewpoint.sysml +4 -2
  157. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +5 -3
  158. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +5 -3
  159. package/src/viewpoints/logical/logical_viewpoint.sysml +4 -2
  160. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +5 -3
  161. package/src/viewpoints/operational/operational_viewpoint.sysml +4 -2
  162. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +5 -3
  163. package/src/viewpoints/physical/physical_viewpoint.sysml +4 -2
  164. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +5 -3
  165. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +5 -3
  166. package/src/viewpoints/rendering/memo_rendering.sysml +220 -40
  167. package/src/viewpoints/requirements/requirements_viewpoint.sysml +4 -2
  168. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +5 -3
  169. package/src/viewpoints/risk/risk_viewpoint.sysml +4 -2
  170. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +5 -3
  171. package/src/viewpoints/software/software_viewpoint.sysml +4 -2
  172. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +5 -3
  173. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +4 -2
  174. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +3 -1
  175. package/src/viewpoints/usability/usability_viewpoint.sysml +4 -2
  176. package/src/viewpoints/verification/verification_viewpoint.sysml +4 -2
  177. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +5 -3
  178. package/templates/connected-device/model/catalog/project.sysml +3 -1
  179. package/templates/default/model/catalog/project.sysml +3 -1
  180. package/templates/infusion-pump/model/catalog/project.sysml +3 -1
  181. package/templates/monitoring-device/model/catalog/project.sysml +3 -1
  182. package/templates/samd/model/catalog/project.sysml +3 -1
@@ -12,15 +12,17 @@ package memo_examples_reusable_instrument {
12
12
  private import memo_architecture_operational_workflows::*;
13
13
  private import memo_architecture_operational_scenarios::*;
14
14
 
15
+ private import memo_core_common::*;
16
+ private import memo_core_common::MemoIdentity;
15
17
  part sterileProcessingTech : User {
16
18
  attribute :>> actorKind = ActorKind::technician;
17
- attribute :>> id = "RI-USR-001"; attribute :>> name = "SterileProcessingTechnician";
19
+ @MemoIdentity { :>> providedId = "RI-USR-001"; } attribute :>> name = "SterileProcessingTechnician";
18
20
  attribute :>> serviceScope = "central sterile services department";
19
21
  }
20
22
 
21
23
  use case ucSterilize : UseCase {
22
24
  attribute :>> useCaseKind = UseCaseKind::clinical;
23
- attribute :>> id = "RI-UC-001"; attribute :>> name = "SterilizeReusableInstrument";
25
+ @MemoIdentity { :>> providedId = "RI-UC-001"; } attribute :>> name = "SterilizeReusableInstrument";
24
26
  attribute :>> goalStatement = "Return a used instrument to sterile, functional condition for the next case.";
25
27
  attribute :>> preCondition = "instrument collected from the OR; gross soil removed at point of use";
26
28
  attribute :>> successOutcome = "instrument cleaned, inspected, sterilized, and released to sterile storage";
@@ -30,36 +32,35 @@ package memo_examples_reusable_instrument {
30
32
 
31
33
  // Reprocessing workflow: exists independently of any single instrument.
32
34
  action wfReprocess : OperationalWorkflow {
33
- attribute :>> id = "RI-WF-001"; attribute :>> name = "InstrumentReprocessingWorkflow";
35
+ @MemoIdentity { :>> providedId = "RI-WF-001"; } attribute :>> name = "InstrumentReprocessingWorkflow";
34
36
  attribute :>> workflowState = WorkflowStateKind::asIs;
35
37
  attribute :>> entryCondition = "used instrument received in decontamination";
36
38
  attribute :>> completionCondition = "sterile pack released to storage";
39
+ action scNominalCycle : OperativeScenario {
40
+ @MemoIdentity { :>> providedId = "RI-SC-001"; } attribute :>> name = "NominalReprocessingCycle";
41
+
42
+ perform actClean;
43
+ perform actInspect;
44
+ perform actSterilizeLoad;
45
+ first actClean then actInspect;
46
+ first actInspect then actSterilizeLoad;
47
+ }
37
48
  }
38
49
  action actClean : OperativeAction {
39
- attribute :>> id = "RI-ACT-001"; attribute :>> name = "CleanAndDisinfect";
50
+ @MemoIdentity { :>> providedId = "RI-ACT-001"; } attribute :>> name = "CleanAndDisinfect";
40
51
  attribute :>> criticality = CriticalityKind::high;
41
52
  }
42
53
  action actInspect : OperativeAction {
43
- attribute :>> id = "RI-ACT-002"; attribute :>> name = "InspectAndFunctionTest";
54
+ @MemoIdentity { :>> providedId = "RI-ACT-002"; } attribute :>> name = "InspectAndFunctionTest";
44
55
  attribute :>> criticality = CriticalityKind::high;
45
56
  }
46
57
  action actSterilizeLoad : OperativeAction {
47
- attribute :>> id = "RI-ACT-003"; attribute :>> name = "PackAndAutoclave";
58
+ @MemoIdentity { :>> providedId = "RI-ACT-003"; } attribute :>> name = "PackAndAutoclave";
48
59
  attribute :>> criticality = CriticalityKind::high;
49
60
  }
50
61
 
51
- action scNominalCycle : OperativeScenario {
52
- attribute :>> id = "RI-SC-001"; attribute :>> name = "NominalReprocessingCycle";
53
-
54
- perform actClean;
55
- perform actInspect;
56
- perform actSterilizeLoad;
57
- first actClean then actInspect;
58
- first actInspect then actSterilizeLoad;
59
- }
60
62
 
61
63
  connection : RealizesUseCase connect realizingWorkflow ::> wfReprocess to realizedUseCase ::> ucSterilize;
62
64
 
63
65
 
64
- connection : HasScenario connect owningWorkflow ::> wfReprocess to pathScenario ::> scNominalCycle;
65
66
  }
@@ -14,8 +14,10 @@ package memo_examples_ros_mobile_robot_project {
14
14
  private import memo_examples_ros_mobile_robot_viewpoints_unassigned::*;
15
15
  private import memo_examples_ros_mobile_robot_viewpoints_unassigned_views_ros_mobile_robot_overview::*;
16
16
 
17
+ private import memo_core_common::*;
18
+ private import memo_core_common::MemoIdentity;
17
19
  part projectBinding : ProjectMethodBinding {
18
- attribute :>> id = "PMB-ROS-MOBILE-ROBOT-001";
20
+ @MemoIdentity { :>> providedId = "PMB-ROS-MOBILE-ROBOT-001"; }
19
21
  attribute :>> name = "RosMobileRobotProjectMethodBinding";
20
22
  attribute :>> projectName = "ROS Mobile Robot";
21
23
  ref :>> selectedMethodology = mdDefaultDefinition;
@@ -27,6 +27,8 @@ package memo_examples_ros_mobile_robot {
27
27
  private import memo_extension_container::*;
28
28
  private import memo_extension_ros::*;
29
29
 
30
+ private import memo_core_common::*;
31
+ private import memo_core_common::MemoIdentity;
30
32
  // ── Message definitions and named topic instances ──────────────────
31
33
  // The definition is the ROS message contract. A named usage is the topic
32
34
  // deployed in this system; publisher/subscriber ports reference that same
@@ -45,31 +47,31 @@ package memo_examples_ros_mobile_robot {
45
47
  }
46
48
 
47
49
  item topicScan : LaserScan {
48
- attribute :>> id = "RMR-TP-001"; attribute :>> name = "ScanTopic";
50
+ @MemoIdentity { :>> providedId = "RMR-TP-001"; } attribute :>> name = "ScanTopic";
49
51
  }
50
52
  item topicCmdVel : VelocityCommand {
51
- attribute :>> id = "RMR-TP-002"; attribute :>> name = "CmdVelTopic";
53
+ @MemoIdentity { :>> providedId = "RMR-TP-002"; } attribute :>> name = "CmdVelTopic";
52
54
  }
53
55
  item topicEstop : EmergencyStop {
54
- attribute :>> id = "RMR-TP-003"; attribute :>> name = "EmergencyStopTopic";
56
+ @MemoIdentity { :>> providedId = "RMR-TP-003"; } attribute :>> name = "EmergencyStopTopic";
55
57
  }
56
58
 
57
59
  // ── Code ────────────────────────────────────────────────────────────
58
60
  part swPerception : SoftwareModule {
59
61
  attribute :>> moduleKind = ModuleKind::unit;
60
- attribute :>> id = "RMR-SW-001"; attribute :>> name = "PerceptionStack";
62
+ @MemoIdentity { :>> providedId = "RMR-SW-001"; } attribute :>> name = "PerceptionStack";
61
63
  attribute :>> responsibility = "Lidar driver and obstacle segmentation.";
62
64
  attribute :>> safetyClass = SafetyClassKind::B;
63
65
  }
64
66
  part swNavigation : SoftwareModule {
65
67
  attribute :>> moduleKind = ModuleKind::unit;
66
- attribute :>> id = "RMR-SW-002"; attribute :>> name = "NavigationStack";
68
+ @MemoIdentity { :>> providedId = "RMR-SW-002"; } attribute :>> name = "NavigationStack";
67
69
  attribute :>> responsibility = "Global and local planning; velocity command generation.";
68
70
  attribute :>> safetyClass = SafetyClassKind::B;
69
71
  }
70
72
  part swSafety : SoftwareModule {
71
73
  attribute :>> moduleKind = ModuleKind::unit;
72
- attribute :>> id = "RMR-SW-003"; attribute :>> name = "SafetyMonitor";
74
+ @MemoIdentity { :>> providedId = "RMR-SW-003"; } attribute :>> name = "SafetyMonitor";
73
75
  attribute :>> responsibility = "Independent watchdog: stops the base on obstacle proximity or missing heartbeat.";
74
76
  attribute :>> safetyClass = SafetyClassKind::C;
75
77
  }
@@ -82,7 +84,7 @@ package memo_examples_ros_mobile_robot {
82
84
  // is exactly what an extension type must NOT decide for the modeller.
83
85
  part nodeLidar : RosNode {
84
86
  attribute :>> runtimeKind = RuntimeKind::thread;
85
- attribute :>> id = "RMR-ND-001"; attribute :>> name = "LidarDriverNode";
87
+ @MemoIdentity { :>> providedId = "RMR-ND-001"; } attribute :>> name = "LidarDriverNode";
86
88
  attribute :>> nodeNamespace = "/robot/perception";
87
89
  attribute :>> lifecycleManaged = true;
88
90
  attribute :>> executorModel = "single-threaded executor, composed";
@@ -104,7 +106,7 @@ package memo_examples_ros_mobile_robot {
104
106
  }
105
107
  part nodeNavigation : RosNode {
106
108
  attribute :>> runtimeKind = RuntimeKind::thread;
107
- attribute :>> id = "RMR-ND-002"; attribute :>> name = "NavigationNode";
109
+ @MemoIdentity { :>> providedId = "RMR-ND-002"; } attribute :>> name = "NavigationNode";
108
110
  attribute :>> nodeNamespace = "/robot/navigation";
109
111
  attribute :>> lifecycleManaged = true;
110
112
  attribute :>> executorModel = "multi-threaded executor, composed";
@@ -157,7 +159,7 @@ package memo_examples_ros_mobile_robot {
157
159
  }
158
160
  part nodeSafetyMonitor : RosNode {
159
161
  attribute :>> runtimeKind = RuntimeKind::process;
160
- attribute :>> id = "RMR-ND-003"; attribute :>> name = "SafetyMonitorNode";
162
+ @MemoIdentity { :>> providedId = "RMR-ND-003"; } attribute :>> name = "SafetyMonitorNode";
161
163
  attribute :>> nodeNamespace = "/robot/safety";
162
164
  attribute :>> lifecycleManaged = false;
163
165
  attribute :>> executorModel = "own process, real-time priority";
@@ -238,7 +240,7 @@ package memo_examples_ros_mobile_robot {
238
240
 
239
241
  // ── Deployment: base relations, unchanged ───────────────────────────
240
242
  part imageRuntime : RosContainerImage {
241
- attribute :>> id = "RMR-DU-001"; attribute :>> name = "RobotRuntimeImage";
243
+ @MemoIdentity { :>> providedId = "RMR-DU-001"; } attribute :>> name = "RobotRuntimeImage";
242
244
  attribute :>> unitKind = "OCI container image";
243
245
  attribute :>> imageReference = "registry.example.com/robot-runtime:2.3.0";
244
246
  attribute :>> registry = "registry.example.com";
@@ -249,7 +251,7 @@ package memo_examples_ros_mobile_robot {
249
251
  attribute :>> integrityProtection = "image signature + SBOM attestation";
250
252
  }
251
253
  part imageSafety : RosContainerImage {
252
- attribute :>> id = "RMR-DU-002"; attribute :>> name = "SafetyMonitorImage";
254
+ @MemoIdentity { :>> providedId = "RMR-DU-002"; } attribute :>> name = "SafetyMonitorImage";
253
255
  attribute :>> unitKind = "OCI container image";
254
256
  attribute :>> imageReference = "registry.example.com/safety-monitor:2.3.0";
255
257
  attribute :>> registry = "registry.example.com";
@@ -259,12 +261,12 @@ package memo_examples_ros_mobile_robot {
259
261
  attribute :>> workspaceOverlay = "/opt/safety_ws";
260
262
  attribute :>> integrityProtection = "image signature + SBOM attestation";
261
263
  }
262
- connection : BuildsInto connect module ::> swPerception to deploymentUnit ::> imageRuntime;
263
- connection : BuildsInto connect module ::> swNavigation to deploymentUnit ::> imageRuntime;
264
- connection : BuildsInto connect module ::> swSafety to deploymentUnit ::> imageSafety;
264
+ allocation : BuildsInto allocate swPerception to imageRuntime;
265
+ allocation : BuildsInto allocate swNavigation to imageRuntime;
266
+ allocation : BuildsInto allocate swSafety to imageSafety;
265
267
 
266
268
  part nodeComputeUnit : ProcessingNode {
267
- attribute :>> id = "RMR-HW-001"; attribute :>> name = "OnboardComputeUnit";
269
+ @MemoIdentity { :>> providedId = "RMR-HW-001"; } attribute :>> name = "OnboardComputeUnit";
268
270
  attribute :>> nodeKind = ProcessingNodeKind::SoC;
269
271
  attribute :>> processorArchitecture = "arm64, 8 core";
270
272
  attribute :>> memoryMB = "16384";
@@ -280,7 +282,7 @@ package memo_examples_ros_mobile_robot {
280
282
  }
281
283
 
282
284
  part rosRuntime : RosContainerRuntime {
283
- attribute :>> id = "RMR-RT-001"; attribute :>> name = "OnboardRosRuntime";
285
+ @MemoIdentity { :>> providedId = "RMR-RT-001"; } attribute :>> name = "OnboardRosRuntime";
284
286
  attribute :>> environmentKind = "container runtime";
285
287
  attribute :>> osOrRtos = "Linux with PREEMPT_RT";
286
288
  attribute :>> orchestrationPlatform = "systemd-managed compose, no cluster orchestrator";
@@ -14,8 +14,10 @@ package memo_examples_software_only_medical_device_project {
14
14
  private import memo_examples_software_only_medical_device_viewpoints_unassigned::*;
15
15
  private import memo_examples_software_only_medical_device_viewpoints_unassigned_views_software_only_medical_device_overview::*;
16
16
 
17
+ private import memo_core_common::*;
18
+ private import memo_core_common::MemoIdentity;
17
19
  part projectBinding : ProjectMethodBinding {
18
- attribute :>> id = "PMB-MEDICAL-DEVICE-001";
20
+ @MemoIdentity { :>> providedId = "PMB-MEDICAL-DEVICE-001"; }
19
21
  attribute :>> name = "SoftwareOnlyMedicalDeviceProjectMethodBinding";
20
22
  attribute :>> projectName = "Software Only Medical Device";
21
23
  ref :>> selectedMethodology = mdDefaultDefinition;
@@ -18,31 +18,33 @@ package memo_examples_software_only_medical_device {
18
18
  // the mechanism working as designed rather than a cost of the move.
19
19
  private import memo_extension_cloud::*;
20
20
 
21
+ private import memo_core_common::*;
22
+ private import memo_core_common::MemoIdentity;
21
23
  part swScreeningApp : SoftwareSystem {
22
- attribute :>> id = "SMD-SW-001"; attribute :>> name = "ScreeningApplication";
24
+ @MemoIdentity { :>> providedId = "SMD-SW-001"; } attribute :>> name = "ScreeningApplication";
23
25
  attribute :>> safetyClass = SafetyClassKind::B;
24
26
  attribute :>> version = "1.4.0";
25
27
  }
26
28
  part algGrading : Algorithm {
27
- attribute :>> id = "SMD-ALG-001"; attribute :>> name = "RetinopathyGradingModel";
29
+ @MemoIdentity { :>> providedId = "SMD-ALG-001"; } attribute :>> name = "RetinopathyGradingModel";
28
30
  attribute :>> algorithmKind = "convolutional neural network, locked (non-adaptive)";
29
31
  attribute :>> clinicalPerformanceClaim = "sensitivity >= 87%, specificity >= 90% vs. reference standard";
30
32
  }
31
33
  part soupInference : SoftwareModule {
32
34
  attribute :>> moduleKind = ModuleKind::soup;
33
- attribute :>> id = "SMD-SOUP-001"; attribute :>> name = "InferenceRuntimeLibrary";
35
+ @MemoIdentity { :>> providedId = "SMD-SOUP-001"; } attribute :>> name = "InferenceRuntimeLibrary";
34
36
  attribute :>> soupVendor = "third-party OSS";
35
37
  attribute :>> soupClassification = SOUPClassificationKind::classB;
36
38
  }
37
39
  part swGradingModule : SoftwareModule {
38
- attribute :>> id = "SMD-SW-002"; attribute :>> name = "GradingModule";
40
+ @MemoIdentity { :>> providedId = "SMD-SW-002"; } attribute :>> name = "GradingModule";
39
41
  attribute :>> responsibility = "Wraps the grading model behind the service API; owns input validation and result structuring.";
40
42
  attribute :>> safetyClass = SafetyClassKind::B;
41
43
  }
42
44
  dependency swGradingModule to soupInference;
43
45
 
44
46
  part svcGrading : CloudService {
45
- attribute :>> id = "SMD-RT-001"; attribute :>> name = "GradingService";
47
+ @MemoIdentity { :>> providedId = "SMD-RT-001"; } attribute :>> name = "GradingService";
46
48
  attribute :>> serviceContract = "REST /grade: image in, structured finding out";
47
49
  attribute :>> discoveryMechanism = "DNS name behind the cluster ingress";
48
50
  attribute :>> updatePolicy = "blue/green rollout";
@@ -51,12 +53,12 @@ package memo_examples_software_only_medical_device {
51
53
  #refinement dependency svcGrading to swGradingModule;
52
54
 
53
55
  part duContainerImage : SoftwareDeploymentUnit {
54
- attribute :>> id = "SMD-DU-001"; attribute :>> name = "ScreeningServiceImage";
56
+ @MemoIdentity { :>> providedId = "SMD-DU-001"; } attribute :>> name = "ScreeningServiceImage";
55
57
  attribute :>> unitKind = "OCI container image";
56
58
  attribute :>> integrityProtection = "image signature + SBOM attestation";
57
59
  }
58
60
  part nodeCloud : ProcessingNode {
59
- attribute :>> id = "SMD-HW-001"; attribute :>> name = "CloudComputeNode";
61
+ @MemoIdentity { :>> providedId = "SMD-HW-001"; } attribute :>> name = "CloudComputeNode";
60
62
  attribute :>> nodeKind = ProcessingNodeKind::cloudServer;
61
63
  attribute :>> supportsContainerization = true;
62
64
  attribute :>> realTimeCapable = false;
@@ -64,5 +66,5 @@ package memo_examples_software_only_medical_device {
64
66
  allocation duContainerImageDeployment : DeploysTo allocate duContainerImage to nodeCloud {
65
67
  attribute :>> deploymentKind = DeploymentKind::containerized;
66
68
  }
67
- connection : HostedBy connect hostAssembly ::> nodeCloud to processingNode ::> svcGrading;
69
+ allocation : HostedBy allocate svcGrading to nodeCloud;
68
70
  }
@@ -14,8 +14,10 @@ package memo_examples_surgical_closure_workflow_project {
14
14
  private import memo_examples_surgical_closure_workflow_viewpoints_unassigned::*;
15
15
  private import memo_examples_surgical_closure_workflow_viewpoints_unassigned_views_surgical_closure_workflow_overview::*;
16
16
 
17
+ private import memo_core_common::*;
18
+ private import memo_core_common::MemoIdentity;
17
19
  part projectBinding : ProjectMethodBinding {
18
- attribute :>> id = "PMB-CLOSURE-WORKFLOW-001";
20
+ @MemoIdentity { :>> providedId = "PMB-CLOSURE-WORKFLOW-001"; }
19
21
  attribute :>> name = "SurgicalClosureWorkflowProjectMethodBinding";
20
22
  attribute :>> projectName = "Surgical Closure Workflow";
21
23
  ref :>> selectedMethodology = mdDefaultDefinition;
@@ -16,36 +16,38 @@ package memo_examples_surgical_closure_workflow {
16
16
  private import memo_architecture_operational_workflows::*;
17
17
  private import memo_architecture_operational_scenarios::*;
18
18
 
19
+ private import memo_core_common::*;
20
+ private import memo_core_common::MemoIdentity;
19
21
  // ── Clinical setting and goal ───────────────────────────────
20
22
  part bariatricSurgeon : User {
21
23
  attribute :>> actorKind = ActorKind::clinician;
22
- attribute :>> id = "LSG-USR-001"; attribute :>> name = "BariatricSurgeon";
24
+ @MemoIdentity { :>> providedId = "LSG-USR-001"; } attribute :>> name = "BariatricSurgeon";
23
25
  attribute :>> clinicalRole = "primary operating surgeon";
24
26
  }
25
27
  part scrubNurse : User {
26
28
  attribute :>> actorKind = ActorKind::clinician;
27
- attribute :>> id = "LSG-USR-002"; attribute :>> name = "ScrubNurse";
29
+ @MemoIdentity { :>> providedId = "LSG-USR-002"; } attribute :>> name = "ScrubNurse";
28
30
  attribute :>> clinicalRole = "sterile instrumentation and count";
29
31
  }
30
32
  part anesthetist : User {
31
33
  attribute :>> actorKind = ActorKind::clinician;
32
- attribute :>> id = "LSG-USR-003"; attribute :>> name = "Anesthetist";
34
+ @MemoIdentity { :>> providedId = "LSG-USR-003"; } attribute :>> name = "Anesthetist";
33
35
  attribute :>> clinicalRole = "anaesthesia and physiologic monitoring";
34
36
  }
35
37
  part bariatricOr : UseContext {
36
- attribute :>> id = "LSG-CTX-001"; attribute :>> name = "BariatricOperatingRoom";
38
+ @MemoIdentity { :>> providedId = "LSG-CTX-001"; } attribute :>> name = "BariatricOperatingRoom";
37
39
  attribute :>> careSetting = "hospital operating room";
38
40
  attribute :>> environment = "sterile laparoscopic operating field";
39
41
  attribute :>> connectedUse = false;
40
42
  }
41
43
  requirement needControlledGastricResection : Need {
42
44
  attribute :>> needKind = NeedKind::clinicalUser;
43
- attribute :>> id = "LSG-N-001";
45
+ @MemoIdentity { :>> providedId = "LSG-N-001"; }
44
46
  attribute :>> statement = "The surgical team needs to perform gastric resection with controlled anatomy, haemostasis, and a checked staple line.";
45
47
  }
46
48
  use case ucPerformSleeveGastrectomy : UseCase {
47
49
  attribute :>> useCaseKind = UseCaseKind::clinical;
48
- attribute :>> id = "LSG-UC-001";
50
+ @MemoIdentity { :>> providedId = "LSG-UC-001"; }
49
51
  attribute :>> name = "PerformLaparoscopicSleeveGastrectomy";
50
52
  attribute :>> goalStatement = "Complete the planned laparoscopic sleeve gastrectomy and transfer the patient with the staple line assessed.";
51
53
  attribute :>> trigger = "patient prepared and surgical time-out complete";
@@ -60,79 +62,77 @@ package memo_examples_surgical_closure_workflow {
60
62
  connection : Motivates connect motivatingNeed ::> needControlledGastricResection to motivatedUseCase ::> ucPerformSleeveGastrectomy;
61
63
 
62
64
  // ── Procedure workflow ──────────────────────────────────────
63
- action actTimeOutAndPosition : OperativeAction { attribute :>> id = "LSG-ACT-001"; attribute :>> name = "ConfirmTimeOutAndPosition"; }
64
- action actEstablishAccess : OperativeAction { attribute :>> id = "LSG-ACT-002"; attribute :>> name = "EstablishLaparoscopicAccess"; }
65
- action actMobilizeStomach : OperativeAction { attribute :>> id = "LSG-ACT-003"; attribute :>> name = "MobilizeStomach"; }
65
+ action actTimeOutAndPosition : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ACT-001"; } attribute :>> name = "ConfirmTimeOutAndPosition"; }
66
+ action actEstablishAccess : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ACT-002"; } attribute :>> name = "EstablishLaparoscopicAccess"; }
67
+ action actMobilizeStomach : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ACT-003"; } attribute :>> name = "MobilizeStomach"; }
66
68
  action actSizeAndCreateSleeve : OperativeAction {
67
- attribute :>> id = "LSG-ACT-004"; attribute :>> name = "SizeAndCreateSleeve"; attribute :>> criticality = CriticalityKind::high;
69
+ @MemoIdentity { :>> providedId = "LSG-ACT-004"; } attribute :>> name = "SizeAndCreateSleeve"; attribute :>> criticality = CriticalityKind::high;
68
70
 
69
71
  action taskCreateStapleLine : OperativeAction {
70
72
  attribute :>> criticality = CriticalityKind::high;
71
- attribute :>> id = "LSG-TASK-001";
73
+ @MemoIdentity { :>> providedId = "LSG-TASK-001"; }
72
74
  attribute :>> name = "CreateAndInspectStapleLine";
73
75
  attribute :>> taskGoal = "create the planned sleeve and identify bleeding or integrity concerns before completion";
74
76
  attribute :>> potentialHarm = "bleeding or staple-line complication not recognized before handover";
75
77
  attribute :>> severityIfFailed = SeverityKind::serious;
76
78
 
77
- action stConfirmAnatomy : OperativeAction { attribute :>> id = "LSG-ST-001"; attribute :>> name = "ConfirmAnatomy"; }
78
- action stCreateStapleLine : OperativeAction { attribute :>> id = "LSG-ST-002"; attribute :>> name = "CreateStapleLine"; }
79
- action stInspectBleeding : OperativeAction { attribute :>> id = "LSG-ST-003"; attribute :>> name = "InspectForBleeding"; }
80
- action stAssessIntegrity : OperativeAction { attribute :>> id = "LSG-ST-004"; attribute :>> name = "AssessStapleLineIntegrity"; }
79
+ action stConfirmAnatomy : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ST-001"; } attribute :>> name = "ConfirmAnatomy"; }
80
+ action stCreateStapleLine : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ST-002"; } attribute :>> name = "CreateStapleLine"; }
81
+ action stInspectBleeding : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ST-003"; } attribute :>> name = "InspectForBleeding"; }
82
+ action stAssessIntegrity : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ST-004"; } attribute :>> name = "AssessStapleLineIntegrity"; }
81
83
  first stConfirmAnatomy then stCreateStapleLine;
82
84
  first stCreateStapleLine then stInspectBleeding;
83
85
  first stInspectBleeding then stAssessIntegrity;
84
86
  }
85
87
  }
86
- action actAssessStapleLine : OperativeAction { attribute :>> id = "LSG-ACT-005"; attribute :>> name = "AssessStapleLine"; attribute :>> criticality = CriticalityKind::high; }
87
- action actExtractSpecimenAndClose : OperativeAction { attribute :>> id = "LSG-ACT-006"; attribute :>> name = "ExtractSpecimenAndClosePorts"; }
88
- action actHandover : OperativeAction { attribute :>> id = "LSG-ACT-007"; attribute :>> name = "CompletePostoperativeHandover"; }
88
+ action actAssessStapleLine : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ACT-005"; } attribute :>> name = "AssessStapleLine"; attribute :>> criticality = CriticalityKind::high; }
89
+ action actExtractSpecimenAndClose : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ACT-006"; } attribute :>> name = "ExtractSpecimenAndClosePorts"; }
90
+ action actHandover : OperativeAction { @MemoIdentity { :>> providedId = "LSG-ACT-007"; } attribute :>> name = "CompletePostoperativeHandover"; }
89
91
 
90
92
  action wfSleeveGastrectomy : ClinicalProcedureWorkflow {
91
- attribute :>> id = "LSG-WF-001";
93
+ @MemoIdentity { :>> providedId = "LSG-WF-001"; }
92
94
  attribute :>> name = "LaparoscopicSleeveGastrectomyWorkflow";
93
95
  attribute :>> workflowState = WorkflowStateKind::toBe;
94
96
  attribute :>> entryCondition = "patient prepared; time-out ready";
95
97
  attribute :>> completionCondition = "staple line assessed; postoperative handover complete";
96
98
  attribute :>> clinicalObjective = "create a gastric sleeve after controlled mobilisation and staple-line assessment";
97
- }
98
-
99
- // ── Scenario paths, each with its own activity/action flow ──
100
- action scNominalSleeveProcedure : OperativeScenario {
101
- attribute :>> id = "LSG-SC-001"; attribute :>> name = "NominalSleeveGastrectomy";
102
- attribute :>> pathSummary = "Time-out, access, mobilisation, sleeve creation, staple-line assessment, closure, and handover complete without rework.";
99
+ action scNominalSleeveProcedure : OperativeScenario {
100
+ @MemoIdentity { :>> providedId = "LSG-SC-001"; } attribute :>> name = "NominalSleeveGastrectomy";
101
+ attribute :>> pathSummary = "Time-out, access, mobilisation, sleeve creation, staple-line assessment, closure, and handover complete without rework.";
103
102
 
104
- perform actTimeOutAndPosition;
105
- perform actEstablishAccess;
106
- perform actMobilizeStomach;
107
- perform actSizeAndCreateSleeve;
108
- perform actAssessStapleLine;
109
- perform actExtractSpecimenAndClose;
110
- perform actHandover;
111
- first actTimeOutAndPosition then actEstablishAccess;
112
- first actEstablishAccess then actMobilizeStomach;
113
- first actMobilizeStomach then actSizeAndCreateSleeve;
114
- first actSizeAndCreateSleeve then actAssessStapleLine;
115
- first actAssessStapleLine then actExtractSpecimenAndClose;
116
- first actExtractSpecimenAndClose then actHandover;
117
- }
118
- action scStapleLineBleeding : OperativeScenario {
119
- attribute :>> scenarioKind = ScenarioKind::alternate;
120
- attribute :>> id = "LSG-SC-002"; attribute :>> name = "StapleLineBleedingRecovery";
121
- attribute :>> pathSummary = "Recognize bleeding, apply the selected control, reassess the staple line, and escalate if the condition remains unresolved.";
103
+ perform actTimeOutAndPosition;
104
+ perform actEstablishAccess;
105
+ perform actMobilizeStomach;
106
+ perform actSizeAndCreateSleeve;
107
+ perform actAssessStapleLine;
108
+ perform actExtractSpecimenAndClose;
109
+ perform actHandover;
110
+ first actTimeOutAndPosition then actEstablishAccess;
111
+ first actEstablishAccess then actMobilizeStomach;
112
+ first actMobilizeStomach then actSizeAndCreateSleeve;
113
+ first actSizeAndCreateSleeve then actAssessStapleLine;
114
+ first actAssessStapleLine then actExtractSpecimenAndClose;
115
+ first actExtractSpecimenAndClose then actHandover;
116
+ }
117
+ action scStapleLineBleeding : OperativeScenario {
118
+ attribute :>> scenarioKind = ScenarioKind::alternate;
119
+ @MemoIdentity { :>> providedId = "LSG-SC-002"; } attribute :>> name = "StapleLineBleedingRecovery";
120
+ attribute :>> pathSummary = "Recognize bleeding, apply the selected control, reassess the staple line, and escalate if the condition remains unresolved.";
122
121
 
123
- action oaControlStapleLineBleeding : OperativeAction {
124
- attribute :>> name = "ControlStapleLineBleeding";
125
- action recognizeBleeding; action controlBleeding; action reassessStapleLine; action escalateIfNeeded;
126
- first start then recognizeBleeding; first recognizeBleeding then controlBleeding; first controlBleeding then reassessStapleLine; first reassessStapleLine then escalateIfNeeded; first escalateIfNeeded then done;
122
+ action oaControlStapleLineBleeding : OperativeAction {
123
+ attribute :>> name = "ControlStapleLineBleeding";
124
+ action recognizeBleeding; action controlBleeding; action reassessStapleLine; action escalateIfNeeded;
125
+ first start then recognizeBleeding; first recognizeBleeding then controlBleeding; first controlBleeding then reassessStapleLine; first reassessStapleLine then escalateIfNeeded; first escalateIfNeeded then done;
126
+ }
127
127
  }
128
128
  }
129
- #refinement dependency scNominalSleeveProcedure to ucPerformSleeveGastrectomy;
130
- #refinement dependency scStapleLineBleeding to ucPerformSleeveGastrectomy;
129
+
130
+ // ── Scenario paths, each with its own activity/action flow ──
131
+ #refinement dependency wfSleeveGastrectomy::scNominalSleeveProcedure to ucPerformSleeveGastrectomy;
132
+ #refinement dependency wfSleeveGastrectomy::scStapleLineBleeding to ucPerformSleeveGastrectomy;
131
133
 
132
134
  connection : RealizesUseCase connect realizingWorkflow ::> wfSleeveGastrectomy to realizedUseCase ::> ucPerformSleeveGastrectomy;
133
135
 
134
136
 
135
- connection : HasScenario connect owningWorkflow ::> wfSleeveGastrectomy to pathScenario ::> scNominalSleeveProcedure;
136
- connection : HasScenario connect owningWorkflow ::> wfSleeveGastrectomy to pathScenario ::> scStapleLineBleeding;
137
137
 
138
138
  }
@@ -14,8 +14,10 @@ package memo_examples_surgical_robot_project {
14
14
  private import memo_examples_surgical_robot_viewpoints_unassigned::*;
15
15
  private import memo_examples_surgical_robot_viewpoints_unassigned_views_surgical_robot_overview::*;
16
16
 
17
+ private import memo_core_common::*;
18
+ private import memo_core_common::MemoIdentity;
17
19
  part projectBinding : ProjectMethodBinding {
18
- attribute :>> id = "PMB-SURGICAL-ROBOT-001";
20
+ @MemoIdentity { :>> providedId = "PMB-SURGICAL-ROBOT-001"; }
19
21
  attribute :>> name = "SurgicalRobotProjectMethodBinding";
20
22
  attribute :>> projectName = "Surgical Robot";
21
23
  ref :>> selectedMethodology = mdDefaultDefinition;
@@ -10,13 +10,15 @@ package memo_examples_surgical_robot {
10
10
  private import memo_architecture_implementation_hardware_structure::*;
11
11
  private import memo_architecture_implementation_ui::*;
12
12
 
13
+ private import memo_core_common::*;
14
+ private import memo_core_common::MemoIdentity;
13
15
  // Control channels: primary + diverse monitor, with declared independence.
14
16
  part chMotionPrimary : LogicalComponent {
15
- attribute :>> id = "SR-LC-001"; attribute :>> name = "MotionControlChannel";
17
+ @MemoIdentity { :>> providedId = "SR-LC-001"; } attribute :>> name = "MotionControlChannel";
16
18
  attribute :>> channelRole = ChannelRoleKind::primary;
17
19
  }
18
20
  part chMotionMonitor : LogicalComponent {
19
- attribute :>> id = "SR-LC-002"; attribute :>> name = "MotionMonitorChannel";
21
+ @MemoIdentity { :>> providedId = "SR-LC-002"; } attribute :>> name = "MotionMonitorChannel";
20
22
  attribute :>> channelRole = ChannelRoleKind::monitor;
21
23
  attribute :>> diversityBasis = "independent encoder set and diverse processor family";
22
24
  }
@@ -27,22 +29,22 @@ package memo_examples_surgical_robot {
27
29
 
28
30
  // Interlock: instrument exchange blocked while arm is in motion.
29
31
  part chExchangeInterlock : LogicalComponent {
30
- attribute :>> id = "SR-LC-003"; attribute :>> name = "InstrumentExchangeInterlock";
32
+ @MemoIdentity { :>> providedId = "SR-LC-003"; } attribute :>> name = "InstrumentExchangeInterlock";
31
33
  attribute :>> channelRole = ChannelRoleKind::interlock;
32
34
  }
33
35
 
34
36
  // Mechanical-force flow from actuator to instrument tip.
35
37
  part exTipForce : LogicalExchange {
36
- attribute :>> id = "SR-EX-001"; attribute :>> name = "TipForceTransmission";
38
+ @MemoIdentity { :>> providedId = "SR-EX-001"; } attribute :>> name = "TipForceTransmission";
37
39
  attribute :>> contentKind = FlowContentKind::mechanicalForce;
38
40
  attribute :>> direction = DirectionKind::output;
39
41
  }
40
42
  part actJointDrive : Actuator {
41
- attribute :>> id = "SR-HW-001"; attribute :>> name = "JointDriveActuator";
43
+ @MemoIdentity { :>> providedId = "SR-HW-001"; } attribute :>> name = "JointDriveActuator";
42
44
  attribute :>> actuationKind = "brushless DC servo with harmonic drive";
43
45
  }
44
46
  part instrShaft : MechanicalPart {
45
- attribute :>> id = "SR-HW-002"; attribute :>> name = "InstrumentShaft";
47
+ @MemoIdentity { :>> providedId = "SR-HW-002"; } attribute :>> name = "InstrumentShaft";
46
48
  attribute :>> mechanicalFunction = "transmits actuation to end effector";
47
49
  attribute :>> patientContact = true;
48
50
  attribute :>> contactNature = "internal tissue, direct";
@@ -53,7 +55,7 @@ package memo_examples_surgical_robot {
53
55
  // surgeon holds, so it is an OperatorInterfaceElement (a PhysicalComponent)
54
56
  // rather than a UIElement — UIElement is software.
55
57
  part elHapticGrip : OperatorInterfaceElement {
56
- attribute :>> id = "SR-UI-001"; attribute :>> name = "HapticMasterGrip";
58
+ @MemoIdentity { :>> providedId = "SR-UI-001"; } attribute :>> name = "HapticMasterGrip";
57
59
  attribute :>> formKind = OperatorInterfaceFormKind::hapticIndicator;
58
60
  attribute :>> guardedAgainstInadvertentActuation = true;
59
61
  }
@@ -23,8 +23,10 @@ package memo_examples_sysml_diagram_samples_project {
23
23
  private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_tree_view::*;
24
24
  private import memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_use_case_view::*;
25
25
 
26
+ private import memo_core_common::*;
27
+ private import memo_core_common::MemoIdentity;
26
28
  part projectBinding : ProjectMethodBinding {
27
- attribute :>> id = "PMB-DIAGRAM-SAMPLES-001";
29
+ @MemoIdentity { :>> providedId = "PMB-DIAGRAM-SAMPLES-001"; }
28
30
  attribute :>> name = "SysmlDiagramSamplesProjectMethodBinding";
29
31
  attribute :>> projectName = "Sysml Diagram Samples";
30
32
  ref :>> selectedMethodology = mdDefaultDefinition;
@@ -10,6 +10,8 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_action_f
10
10
  private import memo_viewpoints_functional_functional_viewpoint::*;
11
11
  private import memo_core_enumerations::*;
12
12
 
13
+ private import memo_core_common::*;
14
+ private import memo_core_common::MemoIdentity;
13
15
  item def DataPacket specializes InterfaceItem {
14
16
  attribute :>> itemKind = InterfaceItemKind::data;
15
17
  }
@@ -71,20 +73,20 @@ package memo_examples_sysml_diagram_samples_viewpoints_unassigned_views_action_f
71
73
  // The target is the action *usage*, not the `ProcessInput` definition.
72
74
  // Binding a value to a definition is not portable — SysIDE rejects it,
73
75
  // because a value must be a feature and a definition is not.
74
- connection linkLaneBProcessesInput : MemoLink
75
- connect linkSource ::> laneB to linkTarget ::> sampleActionFlow.process {
76
- @Rationale {
77
- :>> text =
78
- "Lane B is the swimlane that carries the ProcessInput behaviour. The association crosses the part/action metaclass boundary, so no typed relation can express it.";
79
- }
80
- }
76
+ doc /* Lane B is the swimlane that carries the ProcessInput behaviour. The
77
+ * association crosses the part/action metaclass boundary, so no typed
78
+ * relation can express it — which is precisely what a bare `dependency`
79
+ * means. It was a `MemoLink`, the ontology's own weakest relation, and
80
+ * that is a duplicate of `dependency` rather than something more.
81
+ */
82
+ dependency linkLaneBProcessesInput from laneB to sampleActionFlow::process;
81
83
 
82
84
  view sampleActionFlowView : MemoDiagramView {
83
85
  expose sampleActionFlow::**;
84
86
  expose laneA;
85
87
  expose laneB;
86
88
  attribute depth = 2;
87
- attribute :>> shortDescription = "Dummy actions, typed item flows, successions, and a composite action for renderer development.";
89
+ @MemoIdentity { :>> shortDescription = "Dummy actions, typed item flows, successions, and a composite action for renderer development."; }
88
90
  attribute :>> viewKind = DiagramViewKind::actionflow;
89
91
  attribute :>> diagramType = "afd";
90
92
  ref :>> viewpointDefinition = functionalViewpoint;