@memoarchitect/ontology 0.8.22 → 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 (157) hide show
  1. package/README.md +1 -1
  2. package/examples/connected-patient-monitor/memo.package.yaml +3 -0
  3. package/examples/connected-patient-monitor/model/catalog/viewpoints/unassigned/views/connected_patient_monitor_overview.sysml +1 -1
  4. package/examples/embedded-infusion-pump/memo.package.yaml +3 -0
  5. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +2 -2
  6. package/examples/embedded-infusion-pump/model/catalog/viewpoints/unassigned/views/embedded_infusion_pump_overview.sysml +1 -1
  7. package/examples/functional-logical-physical/memo.package.yaml +3 -0
  8. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +1 -1
  9. package/examples/functional-logical-physical/model/catalog/viewpoints/unassigned/views/functional_logical_physical_overview.sysml +1 -1
  10. package/examples/gpca-pump/memo.package.yaml +3 -0
  11. package/examples/gpca-pump/model/catalog/gpca_context.sysml +5 -3
  12. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +1 -2
  13. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +52 -82
  14. package/examples/gpca-pump/model/catalog/gpca_system.sysml +6 -19
  15. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +0 -3
  16. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +1 -3
  17. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +2 -4
  18. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +1 -4
  19. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +2 -5
  20. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +1 -3
  21. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +1 -3
  22. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +1 -3
  23. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +3 -6
  24. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +1 -3
  25. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +1 -3
  26. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +1 -3
  27. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +1 -3
  28. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +2 -4
  29. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +1 -3
  30. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +1 -3
  31. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +3 -6
  32. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +1 -3
  33. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +1 -4
  34. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +1 -4
  35. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +1 -3
  36. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +1 -3
  37. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +1 -4
  38. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +1 -3
  39. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +2 -5
  40. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +1 -4
  41. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +1 -3
  42. package/examples/ivd-laboratory-system/memo.package.yaml +3 -0
  43. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +1 -1
  44. package/examples/ivd-laboratory-system/model/catalog/viewpoints/unassigned/views/ivd_laboratory_system_overview.sysml +1 -1
  45. package/examples/manual-surgical-instrument/memo.package.yaml +3 -0
  46. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +1 -1
  47. package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/views/manual_surgical_instrument_overview.sysml +1 -1
  48. package/examples/multidimensional-layers/memo.package.yaml +3 -0
  49. package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/views/multidimensional_layers_overview.sysml +0 -1
  50. package/examples/nested-architecture-dsm/memo.package.yaml +3 -0
  51. package/examples/reusable-instrument/memo.package.yaml +3 -0
  52. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +15 -24
  53. package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/views/reusable_instrument_overview.sysml +0 -1
  54. package/examples/ros-mobile-robot/memo.package.yaml +3 -0
  55. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +0 -1
  56. package/examples/software-only-medical-device/memo.package.yaml +3 -0
  57. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +1 -1
  58. package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/views/software_only_medical_device_overview.sysml +0 -1
  59. package/examples/surgical-closure-workflow/memo.package.yaml +3 -0
  60. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +36 -49
  61. package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/views/surgical_closure_workflow_overview.sysml +0 -1
  62. package/examples/surgical-robot/memo.package.yaml +3 -0
  63. package/examples/surgical-robot/model/catalog/viewpoints/unassigned/views/surgical_robot_overview.sysml +0 -1
  64. package/examples/sysml-diagram-samples/memo.package.yaml +2 -0
  65. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +2 -3
  66. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +1 -2
  67. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +1 -2
  68. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +1 -2
  69. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +14 -15
  70. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +1 -2
  71. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +1 -2
  72. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +1 -2
  73. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +1 -2
  74. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +1 -2
  75. package/examples/temperature-alarm/memo.package.yaml +3 -0
  76. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +4 -8
  77. package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/views/temperature_alarm_overview.sysml +0 -1
  78. package/examples/ui-screen-regions/memo.package.yaml +3 -0
  79. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +1 -2
  80. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +1 -2
  81. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +1 -2
  82. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +1 -2
  83. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +1 -2
  84. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +1 -2
  85. package/extensions/aadl/memo.package.yaml +1 -1
  86. package/extensions/cloud/memo.package.yaml +1 -1
  87. package/extensions/container/memo.package.yaml +1 -1
  88. package/extensions/container/src/container_extension.sysml +2 -2
  89. package/extensions/messaging/memo.package.yaml +1 -1
  90. package/extensions/ros/memo.package.yaml +1 -1
  91. package/methodologies/default/memo.package.yaml +1 -1
  92. package/methodologies/gpca/memo.package.yaml +1 -1
  93. package/ontology/memo.package.yaml +1 -1
  94. package/package.json +1 -1
  95. package/profile/memo.package.yaml +1 -1
  96. package/src/architecture/functional/behavior/memo_behavior.sysml +4 -4
  97. package/src/architecture/functional/functions/memo_functions.sysml +6 -6
  98. package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +2 -2
  99. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +7 -7
  100. package/src/architecture/implementation/ui/memo_ui.sysml +8 -8
  101. package/src/architecture/logical/interfaces/memo_interfaces.sysml +1 -1
  102. package/src/architecture/logical/structure/memo_logical_structure.sysml +5 -5
  103. package/src/architecture/operational/activities/memo_activities.sysml +19 -28
  104. package/src/architecture/operational/context/actors/memo_actors.sysml +5 -4
  105. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +7 -7
  106. package/src/architecture/operational/context/use_context/memo_use_context.sysml +2 -3
  107. package/src/architecture/operational/scenarios/memo_scenarios.sysml +18 -100
  108. package/src/architecture/operational/structure/memo_operational.sysml +42 -13
  109. package/src/architecture/operational/use_cases/memo_use_cases.sysml +0 -1
  110. package/src/architecture/operational/workflows/memo_workflows.sysml +20 -22
  111. package/src/architecture/realization/deployment/memo_deployment.sysml +10 -10
  112. package/src/architecture/realization/physical/memo_physical_architecture.sysml +2 -2
  113. package/src/artifacts/templates/dhf/system/sad.md +3 -3
  114. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +2 -2
  115. package/src/assurance/human_factors/memo_human_factors.sysml +2 -2
  116. package/src/assurance/requirements/memo_requirements.sysml +2 -18
  117. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +1 -1
  118. package/src/assurance/safety_risk/memo_risk.sysml +12 -0
  119. package/src/assurance/verification_validation/memo_assurance.sysml +1 -1
  120. package/src/core/common/memo_common.sysml +9 -5
  121. package/src/core/relationships/memo_relationships.sysml +8 -8
  122. package/src/methodology/workflow/memo_workflow.sysml +5 -5
  123. package/src/rules/closure/closure_rules.sysml +20 -20
  124. package/src/rules/crosslayer/cross_layer_rules.sysml +2 -2
  125. package/src/rules/ontology/ontology_invariants.sysml +40 -40
  126. package/src/rules/quantitative/quantitative_rules.sysml +2 -2
  127. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +29 -29
  128. package/src/viewpoints/clinical/clinical_viewpoint.sysml +1 -2
  129. package/src/viewpoints/context/context_viewpoint.sysml +1 -2
  130. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +1 -2
  131. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +2 -4
  132. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +46 -4
  133. package/src/viewpoints/functional/functional_viewpoint.sysml +2 -3
  134. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +1 -2
  135. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +1 -2
  136. package/src/viewpoints/logical/logical_viewpoint.sysml +1 -2
  137. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +1 -2
  138. package/src/viewpoints/operational/operational_viewpoint.sysml +2 -3
  139. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +2 -3
  140. package/src/viewpoints/physical/physical_viewpoint.sysml +1 -2
  141. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +1 -2
  142. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +1 -2
  143. package/src/viewpoints/requirements/requirements_viewpoint.sysml +1 -2
  144. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +1 -2
  145. package/src/viewpoints/risk/risk_viewpoint.sysml +1 -2
  146. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +1 -2
  147. package/src/viewpoints/software/software_viewpoint.sysml +1 -2
  148. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +1 -2
  149. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +1 -2
  150. package/src/viewpoints/usability/usability_viewpoint.sysml +1 -2
  151. package/src/viewpoints/verification/verification_viewpoint.sysml +1 -2
  152. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +1 -2
  153. package/templates/connected-device/memo.package.yaml +2 -0
  154. package/templates/default/memo.package.yaml +2 -0
  155. package/templates/infusion-pump/memo.package.yaml +2 -0
  156. package/templates/monitoring-device/memo.package.yaml +2 -0
  157. package/templates/samd/memo.package.yaml +2 -0
@@ -16,59 +16,15 @@ package memo_architecture_operational_scenarios {
16
16
  private import memo_architecture_operational_workflows::*;
17
17
  private import memo_architecture_operational_use_cases::*;
18
18
 
19
- enum def ScenarioVariantKind {
19
+ // A scenario is a nominal path or an alternate (exception/recovery) path.
20
+ // Defaults to nominal.
21
+ enum def ScenarioKind {
20
22
  enum nominal;
21
23
  enum alternate;
22
- enum exception;
23
- enum recovery;
24
- }
25
-
26
- enum def OperationalConditionKind {
27
- enum normal;
28
- enum degraded;
29
- enum emergency;
30
- enum maintenance;
31
- enum startup;
32
- enum shutdown;
33
- enum timeout;
34
- enum misuse;
35
- enum foreseeableMisuse;
36
- }
37
-
38
- // `memoAnalysis` and `memoVerification` keep the regulated terms `analysis`
39
- // and `verification` intact but prefixed, because both are SysML v2 reserved
40
- // words and cannot be bare enum names. `validation` is not reserved.
41
- enum def ScenarioPurposeKind {
42
- enum memoAnalysis;
43
- enum design;
44
- enum memoVerification;
45
- enum validation;
46
- enum risk;
47
- enum cybersecurity;
48
- }
49
-
50
- // The architecture/assurance role a scenario plays. These values preserve
51
- // the former named scenario specializations without turning a taxonomy into
52
- // six action definitions.
53
- enum def ScenarioKind {
54
- enum functional;
55
- enum operative;
56
- enum ui;
57
- enum threat;
58
- // `verification` is a SysML v2 reserved word; retain the regulated
59
- // term with the same `memo` prefix used by ScenarioPurposeKind.
60
- enum memoVerification;
61
- enum hazardRelatedUse;
62
24
  }
63
25
 
64
- // Shared scenario foundation. Fields that apply only to one scenario kind
65
- // remain optional here; this keeps the taxonomy queryable without six
66
- // otherwise redundant action definitions.
67
- action def MemoScenario specializes MemoAction {
68
- attribute scenarioKind : ScenarioKind;
69
- attribute variantKind : ScenarioVariantKind;
70
- attribute operationalCondition : OperationalConditionKind;
71
- attribute scenarioPurpose : ScenarioPurposeKind[0..*];
26
+ action def OperativeScenario specializes MemoAction {
27
+ attribute scenarioKind : ScenarioKind default ScenarioKind::nominal;
72
28
  attribute initialState : String;
73
29
  attribute trigger : String;
74
30
  attribute preCondition : String;
@@ -76,21 +32,11 @@ package memo_architecture_operational_scenarios {
76
32
  attribute postCondition : String;
77
33
  attribute pathSummary : String;
78
34
 
79
- ref involvedActors : OperationalParticipant[0..*];
35
+ // The workflow this scenario belongs to is expressed by the workflow
36
+ // (HasScenario); a nominal/alternate pair are scenarios of the same
37
+ // workflow, distinguished by scenarioKind — no baseScenario back-ref.
38
+ // Actors are derived from `perform` on the nested steps, not listed.
80
39
  ref useContext : UseContext[0..1];
81
- // Alternate/exception/recovery scenarios reference their base and the
82
- // point at which behavior diverges — never a copied workflow.
83
- ref baseScenario : MemoScenario[0..1];
84
- attribute variationPoint : String;
85
-
86
- // functional scenario
87
- ref selectedFlow : MemoAction[0..1];
88
- // operative scenario
89
- ref parentWorkflow : OperationalWorkflow[0..1];
90
- ref parentUseCase : UseCase[0..1];
91
- ref activities : OperationalActivity[0..*];
92
- // UI scenario
93
- ref parentFlow : MemoAction[0..1];
94
40
  // threat scenario
95
41
  attribute actorDescription : String;
96
42
  attribute assumptionSummary : String;
@@ -106,45 +52,17 @@ package memo_architecture_operational_scenarios {
106
52
  attribute selectionRationale : String;
107
53
  }
108
54
 
109
- // An actual or hypothetical execution of a scenario (usability test run,
110
- // postmarket incident reconstruction, simulated-use session).
111
- part def ScenarioOccurrence specializes MemoPart {
112
- attribute occurredAt : String;
113
- attribute hypothetical : Boolean;
114
- attribute outcomeSummary : String;
115
- ref executedScenario : MemoScenario[1];
116
- }
117
-
118
- // Ordered selection of a workflow step into a scenario path.
119
- // Selects unifies SelectsStep / SelectsFlow (a scenario selects its path
120
- // element), keyed by selectsKind.
121
- enum def SelectsKind {
122
- enum step;
123
- enum 'flow';
124
- }
125
- connection def Selects :> MemoRelationship {
126
- attribute selectsKind : SelectsKind;
127
- attribute pathOrder : Integer[0..1];
128
- attribute decisionTaken : String[0..1];
129
- end scenario : MemoScenario :>> source;
130
- // A selected path element may be a WorkflowStep action or a flow
131
- // element. Those constructs do not share a MEMO base metaclass.
132
- end selected :>> target;
133
- }
134
- abstract connection selectsLinks : Selects[*];
135
- metadata def <selects> SelectsMetadata :> SemanticMetadata {
136
- :> annotatedElement : SysML::ConnectionDefinition;
137
- :> annotatedElement : SysML::ConnectionUsage;
138
- :>> baseType = selectsLinks meta SysML::Usage;
139
- }
140
- connection def OccursDuring :> MemoRelationship {
141
- end occurrence : ScenarioOccurrence :>> source;
142
- end context : UseContext :>> target;
55
+ // A workflow is composed of one or more scenarios (nominal + alternate
56
+ // paths). ScenarioOccurrence/Executes were removed: an actual execution is
57
+ // a native SysML *usage* of the scenario, not a separate def + relation.
58
+ connection def HasScenario :> MemoRelationship {
59
+ end owningWorkflow : OperationalWorkflow :>> source;
60
+ end pathScenario : OperativeScenario :>> target;
143
61
  }
144
- abstract connection occursDuringLinks : OccursDuring[*];
145
- metadata def <occursDuring> OccursDuringMetadata :> SemanticMetadata {
62
+ abstract connection hasScenarioLinks : HasScenario[*];
63
+ metadata def <hasScenario> HasScenarioMetadata :> SemanticMetadata {
146
64
  :> annotatedElement : SysML::ConnectionDefinition;
147
65
  :> annotatedElement : SysML::ConnectionUsage;
148
- :>> baseType = occursDuringLinks meta SysML::Usage;
66
+ :>> baseType = hasScenarioLinks meta SysML::Usage;
149
67
  }
150
68
  }
@@ -1,31 +1,60 @@
1
1
  package memo_architecture_operational_structure {
2
+ private import Metaobjects::SemanticMetadata;
2
3
  private import ScalarValues::*;
3
4
 
4
5
  private import memo_core_common::*;
5
6
  private import memo_core_enumerations::*;
6
7
  private import memo_core_relationships::*;
7
- private import memo_architecture_operational_activities::*;
8
- // OperationalActivity now lives in memo_architecture_operational_activities (action def) and
9
- // Operational scenarios are defined in memo_architecture_operational_scenarios.
10
- part def Mission specializes DocumentedElement {
11
- attribute missionKind : String;
12
- attribute successCriteria : String;
13
- attribute operationalContext : String;
8
+ private import memo_architecture_operational_use_cases::*;
9
+
10
+ // IEC 62366-1 / ISO 14971 intended use: the medical device's declared
11
+ // purpose and the root of the operational spine. A MemoMission, because
12
+ // "mission" has no medical-device meaning — intended use is what a device
13
+ // exists to do. Was in memo_assurance_requirements; moved here as the
14
+ // operational-world root.
15
+ part def IntendedUse specializes MemoMission {
16
+ attribute indication : String;
17
+ attribute contraindication : String;
18
+ attribute patientPopulation : String;
19
+ attribute clinicalBenefit : String;
20
+ attribute regulatoryClassification : String;
14
21
  }
15
- part def OperationalEntity specializes ArchitectureElement {
22
+ part def OperationalEntity specializes MemoPart {
16
23
  attribute entityKind : OperationalEntityKind;
17
24
  attribute operationalDomain : String;
18
25
  attribute responsibility : String;
19
26
  }
20
- part def OperationalCapability specializes ArchitectureElement {
27
+ part def OperationalCapability specializes MemoPart {
21
28
  attribute capabilityLevel : String;
22
29
  attribute preCondition : String;
23
30
  attribute postCondition : String;
24
31
  }
25
- part def OperationalInteraction specializes ArchitectureElement {
26
- attribute exchangeKind : FlowKind;
27
- attribute direction : DirectionKind;
28
- attribute latencyConstraint : String;
32
+
33
+ // The intended use requires these operational capabilities (ARCADIA:
34
+ // Mission Requires Capability).
35
+ connection def RequiresCapability :> MemoRelationship {
36
+ end requiringIntendedUse : IntendedUse :>> source;
37
+ end requiredCapability : OperationalCapability :>> target;
38
+ }
39
+ abstract connection requiresCapabilityLinks : RequiresCapability[*];
40
+ metadata def <requiresCapability> RequiresCapabilityMetadata :> SemanticMetadata {
41
+ :> annotatedElement : SysML::ConnectionDefinition;
42
+ :> annotatedElement : SysML::ConnectionUsage;
43
+ :>> baseType = requiresCapabilityLinks meta SysML::Usage;
44
+ }
45
+
46
+ // An operational capability enables a use case (the ability the actor draws
47
+ // on to accomplish the goal). Capability is tied to the use case, not to
48
+ // individual activities.
49
+ connection def EnablesUseCase :> MemoRelationship {
50
+ end enablingCapability : OperationalCapability :>> source;
51
+ end enabledUseCase : UseCase :>> target;
52
+ }
53
+ abstract connection enablesUseCaseLinks : EnablesUseCase[*];
54
+ metadata def <enablesUseCase> EnablesUseCaseMetadata :> SemanticMetadata {
55
+ :> annotatedElement : SysML::ConnectionDefinition;
56
+ :> annotatedElement : SysML::ConnectionUsage;
57
+ :>> baseType = enablesUseCaseLinks meta SysML::Usage;
29
58
  }
30
59
 
31
60
  }
@@ -40,7 +40,6 @@ package memo_architecture_operational_use_cases {
40
40
  ref primaryUser : User[0..1];
41
41
  ref supportingActors : OperationalParticipant[0..*];
42
42
  ref useContext : UseContext[0..1];
43
- ref originatingNeeds : Need[0..*];
44
43
  }
45
44
 
46
45
  connection def Motivates :> MemoRelationship {
@@ -37,20 +37,24 @@ package memo_architecture_operational_workflows {
37
37
  attribute completionCondition : String;
38
38
  attribute recoveryPathSummary : String;
39
39
  attribute timingConstraints : String;
40
- ref involvedActors : OperationalParticipant[0..*];
41
40
  attribute environmentSummary : String;
42
41
  }
43
42
 
44
- // A step in a workflow wraps an operational activity or user task by
45
- // reference — the same activity may appear in several workflows.
46
- action def WorkflowStep specializes MemoAction {
47
- attribute entryCondition : String;
48
- attribute exitCondition : String;
49
- ref performedActivity : OperationalActivity[0..1];
50
- ref performedTask : UserTask[0..1];
51
- ref responsibleRole : OperationalParticipant[0..1];
43
+ // The use case a workflow realizes. Many workflows may trace to one use
44
+ // case; the use case does not own its workflows (the trace points upward,
45
+ // workflow → use case).
46
+ connection def RealizesUseCase :> MemoRelationship {
47
+ end realizingWorkflow : OperationalWorkflow :>> source;
48
+ end realizedUseCase : UseCase :>> target;
49
+ }
50
+ abstract connection realizesUseCaseLinks : RealizesUseCase[*];
51
+ metadata def <realizesUseCase> RealizesUseCaseMetadata :> SemanticMetadata {
52
+ :> annotatedElement : SysML::ConnectionDefinition;
53
+ :> annotatedElement : SysML::ConnectionUsage;
54
+ :>> baseType = realizesUseCaseLinks meta SysML::Usage;
52
55
  }
53
56
 
57
+
54
58
  // decision / fork / join / handoff.
55
59
  enum def ControlNodeKind {
56
60
  enum decision;
@@ -69,8 +73,6 @@ package memo_architecture_operational_workflows {
69
73
  attribute parallelismRationale : String[0..1];
70
74
  attribute joinCondition : String[0..1];
71
75
  attribute informationTransferred : String[0..1];
72
- ref fromRole : OperationalParticipant[0..1];
73
- ref toRole : OperationalParticipant[0..1];
74
76
  }
75
77
 
76
78
  // Resources a workflow requires: information, materials, or equipment by
@@ -82,18 +84,14 @@ package memo_architecture_operational_workflows {
82
84
  }
83
85
 
84
86
  // ── Workflow-level relationships ─────────────────────────────
85
- // Supports unifies SupportsUseCase / SupportsTask / ContributesToCapability
86
- // (an element supports a goal/task/capability), keyed by supportKind.
87
- enum def SupportKind {
88
- enum useCase;
89
- enum task;
90
- enum capability;
91
- }
87
+ // An element supports (affords, enables) an action — e.g. a UI element
88
+ // that affords a user task. Use-case and capability tracing are direct
89
+ // refs now (OperationalWorkflow.useCase,
90
+ // OperativeAction.contributesToCapabilities), so the former
91
+ // SupportKind discriminator is gone: what used to be three enum values
92
+ // that each implied a different target type are now two typed refs plus
93
+ // this one plain relation.
92
94
  connection def Supports :> MemoRelationship {
93
- attribute supportKind : SupportKind;
94
- // The accepted endpoints span SysML metaclasses: an operational
95
- // workflow or other action may support a use case, task, or
96
- // capability. They therefore have no single MEMO base type.
97
95
  end supporter :>> source;
98
96
  end supported : MemoAction :>> target;
99
97
  }
@@ -1,10 +1,10 @@
1
- // Deployment (allocation) view: SoftwareModule buildsInto DeploymentUnit;
2
- // DeploymentUnit deploysTo ProcessingNode. Software deploys only to capable
1
+ // Deployment (allocation) view: SoftwareModule buildsInto SoftwareDeploymentUnit;
2
+ // SoftwareDeploymentUnit deploysTo ProcessingNode. Software deploys only to capable
3
3
  // execution nodes (rules/crosslayer).
4
4
  //
5
5
  // `HostedBy` is NOT part of that chain, and this comment used to claim it was
6
6
  // ("SoftwareComponent hostedBy ProcessingNode"). It is
7
- // `processingNode : ArchitectureElement -> hostAssembly : ArchitectureElement`:
7
+ // `processingNode : ProcessingNode -> hostAssembly : PhysicalAssembly`:
8
8
  // physical hosting of a node by the assembly it is mounted in, running the
9
9
  // other way and between different things. Software reaches a node through
10
10
  // DeploysTo.
@@ -26,14 +26,14 @@ package memo_architecture_realization_deployment {
26
26
  private import memo_architecture_logical_structure::*;
27
27
  private import memo_architecture_logical_interfaces::*; // ComponentExchange
28
28
 
29
- part def DeploymentUnit specializes ArchitectureElement {
29
+ part def SoftwareDeploymentUnit specializes MemoPart {
30
30
  attribute unitKind : String;
31
31
  attribute version : String;
32
32
  attribute integrityProtection : String;
33
33
  attribute installationMechanism : String;
34
34
  }
35
35
 
36
- part def RuntimeEnvironment specializes ArchitectureElement {
36
+ part def RuntimeEnvironment specializes MemoPart {
37
37
  attribute environmentKind : String;
38
38
  attribute osOrRtos : String;
39
39
  attribute providedServices : String;
@@ -42,7 +42,7 @@ package memo_architecture_realization_deployment {
42
42
 
43
43
  connection def BuildsInto :> MemoRelationship {
44
44
  end module : SoftwareModule :>> source;
45
- end deploymentUnit : DeploymentUnit :>> target;
45
+ end deploymentUnit : SoftwareDeploymentUnit :>> target;
46
46
  }
47
47
  abstract connection buildsIntoLinks : BuildsInto[*];
48
48
  metadata def <buildsInto> BuildsIntoMetadata :> SemanticMetadata {
@@ -52,7 +52,7 @@ package memo_architecture_realization_deployment {
52
52
  }
53
53
  connection def DeploysTo :> MemoRelationship {
54
54
  attribute deploymentKind : DeploymentKind;
55
- end deploymentUnit : DeploymentUnit :>> source;
55
+ end deploymentUnit : SoftwareDeploymentUnit :>> source;
56
56
  end node : ProcessingNode :>> target;
57
57
  }
58
58
  abstract connection deploysToLinks : DeploysTo[*];
@@ -140,7 +140,7 @@ package memo_architecture_realization_deployment {
140
140
  enum path;
141
141
  }
142
142
  // A flow declared at a logical component boundary (in-port → out-port).
143
- part def FlowSpecification specializes ArchitectureElement {
143
+ part def FlowSpecification specializes MemoPart {
144
144
  attribute flowKind : FlowSpecKind;
145
145
  ref inPort : LogicalPort[0..1];
146
146
  ref outPort : LogicalPort[0..1];
@@ -148,7 +148,7 @@ package memo_architecture_realization_deployment {
148
148
  // A complete source→sink flow traced across the layers and the software→
149
149
  // hardware binding it traverses. `latencyBudgetMs` and `analysisPurpose`
150
150
  // (latency | fault-propagation | security) drive the AADL-style analysis.
151
- part def EndToEndFlow specializes ArchitectureElement {
151
+ part def EndToEndFlow specializes MemoPart {
152
152
  attribute latencyBudgetMs : Real;
153
153
  attribute analysisPurpose : String;
154
154
  ref sourceFunction : MemoFunction[0..1];
@@ -174,7 +174,7 @@ package memo_architecture_realization_deployment {
174
174
  // The flow traverses a software→hardware binding; latency accrues here.
175
175
  connection def FlowTraversesBinding :> MemoRelationship {
176
176
  end endToEndFlow : EndToEndFlow :>> source;
177
- end deploymentUnit : DeploymentUnit :>> target;
177
+ end deploymentUnit : SoftwareDeploymentUnit :>> target;
178
178
  }
179
179
  abstract connection flowTraversesBindingLinks : FlowTraversesBinding[*];
180
180
  metadata def <flowTraversesBinding> FlowTraversesBindingMetadata :> SemanticMetadata {
@@ -6,7 +6,7 @@ package memo_architecture_realization_physical {
6
6
 
7
7
  private import memo_core_common::*;
8
8
  private import memo_core_enumerations::*;
9
- part def ProcessingNode specializes ArchitectureElement {
9
+ part def ProcessingNode specializes MemoPart {
10
10
  attribute nodeKind : ProcessingNodeKind;
11
11
  attribute processorArchitecture : String;
12
12
  attribute memoryMB : String;
@@ -17,7 +17,7 @@ package memo_architecture_realization_physical {
17
17
  attribute supportsContainerization : Boolean;
18
18
  attribute realTimeCapable : Boolean;
19
19
  }
20
- part def MemoryDevice specializes ArchitectureElement {
20
+ part def MemoryDevice specializes MemoPart {
21
21
  attribute memoryKind : String;
22
22
  attribute capacityMB : String;
23
23
  attribute nonVolatile : Boolean;
@@ -75,7 +75,7 @@ Runtime behaviour: the components executing in the system and the connectors thr
75
75
  #### 3.2.1 Runtime Environments
76
76
 
77
77
  ```memo-query
78
- kind: [RuntimeEnvironment, DeploymentUnit]
78
+ kind: [RuntimeEnvironment, SoftwareDeploymentUnit]
79
79
  display: table
80
80
  columns: name, layer, doc
81
81
  sort: name
@@ -101,12 +101,12 @@ Software elements mapped to their execution environments.
101
101
  #### 3.3.1 Deployment Units
102
102
 
103
103
  ```memo-query
104
- kind: DeploymentUnit
104
+ kind: SoftwareDeploymentUnit
105
105
  traverse: outgoing deploysTo
106
106
  display: table
107
107
  columns: name, kind, layer, doc
108
108
  sort: name
109
- empty: "No deployments defined. Add DeploysTo links from DeploymentUnit to the processing node."
109
+ empty: "No deployments defined. Add DeploysTo links from SoftwareDeploymentUnit to the processing node."
110
110
  ```
111
111
 
112
112
  ---
@@ -10,7 +10,7 @@ package memo_assurance_cybersecurity {
10
10
  private import memo_assurance_verification_validation::*;
11
11
  private import memo_architecture_operational_scenarios::*;
12
12
 
13
- part def CybersecurityAsset specializes ArchitectureElement {
13
+ part def CybersecurityAsset specializes MemoPart {
14
14
  attribute assetKind : AssetKind;
15
15
  attribute confidentialityNeed : String;
16
16
  attribute integrityNeed : String;
@@ -99,7 +99,7 @@ package memo_assurance_cybersecurity {
99
99
  }
100
100
  connection def RealizedByScenario :> MemoRelationship {
101
101
  end realizedThreat : RequirementDriver :>> source;
102
- end scenario : MemoScenario :>> target;
102
+ end scenario : OperativeScenario :>> target;
103
103
  }
104
104
  abstract connection realizedByScenarioLinks : RealizedByScenario[*];
105
105
  metadata def <realizedByScenario> RealizedByScenarioMetadata :> SemanticMetadata {
@@ -21,7 +21,7 @@ package memo_assurance_human_factors {
21
21
  }
22
22
 
23
23
  connection def CommitsUseError :> MemoRelationship {
24
- end task : UserTask :>> source;
24
+ end task : OperativeAction :>> source;
25
25
  end useError : UseError :>> target;
26
26
  }
27
27
  abstract connection commitsUseErrorLinks : CommitsUseError[*];
@@ -32,7 +32,7 @@ package memo_assurance_human_factors {
32
32
  }
33
33
  connection def EvaluatesTask :> MemoRelationship {
34
34
  end evaluation : MemoEvidence :>> source;
35
- end task : UserTask :>> target;
35
+ end task : OperativeAction :>> target;
36
36
  }
37
37
  abstract connection evaluatesTaskLinks : EvaluatesTask[*];
38
38
  metadata def <evaluatesTask> EvaluatesTaskMetadata :> SemanticMetadata {
@@ -7,22 +7,6 @@ package memo_assurance_requirements {
7
7
  private import memo_assurance_requirements_needs::*;
8
8
  part def RiskDriver specializes RequirementDriver { attribute driverKind : String; }
9
9
 
10
- // ISO 14971 risk-analysis inputs. These are model elements so hazards,
11
- // scenarios, requirements, and DHF records can trace to the exact use
12
- // definition or foreseeable misuse that motivated them.
13
- part def IntendedUse specializes DocumentedElement {
14
- attribute indication : String;
15
- attribute contraindication : String;
16
- attribute patientPopulation : String;
17
- attribute clinicalBenefit : String;
18
- attribute regulatoryClassification : String;
19
- }
20
- part def ReasonablyForeseeableMisuse specializes DocumentedElement {
21
- attribute misuseContext : String;
22
- attribute foreseeableBasis : String;
23
- attribute affectedUseContext : String;
24
- }
25
-
26
10
  // The kind of requirement. Was a subclass branch (SystemRequirement /
27
11
  // SoftwareRequirement / HardwareRequirement) plus a parallel design-control
28
12
  // specification hierarchy (DesignControlSpecification / System- / Software- /
@@ -42,14 +26,14 @@ package memo_assurance_requirements {
42
26
 
43
27
  requirement def Requirement specializes MemoRequirement {
44
28
  attribute requirementKind : RequirementKind;
45
- attribute statement : String;
29
+ attribute :>> statement : String;
46
30
  attribute sourceKind : RequirementSourceKind;
47
31
  attribute concernKind : ConcernKind;
48
32
  // Editorial state is the inherited `status : ElementStatusKind` — the
49
33
  // one status vocabulary in MEMO. Whether a requirement is implemented,
50
34
  // verified, or validated is read from its Realizes / VerifiedBy /
51
35
  // Validates links, not restated here.
52
- attribute acceptanceCriteria : String;
36
+ attribute :>> acceptanceCriteria : String;
53
37
  attribute subjectDescription : String;
54
38
  attribute actorDescription : String;
55
39
  attribute assumptionSummary : String;
@@ -184,7 +184,7 @@ package memo_assurance_safety_risk_analysis {
184
184
  :>> baseType = identifiesHazardLinks meta SysML::Usage;
185
185
  }
186
186
  connection def HasFailureMode :> MemoRelationship {
187
- end element : ArchitectureElement :>> source;
187
+ end element : MemoPart :>> source;
188
188
  end failureMode : FailureMode :>> target;
189
189
  }
190
190
  abstract connection hasFailureModeLinks : HasFailureMode[*];
@@ -6,6 +6,18 @@ package memo_assurance_safety_risk {
6
6
  private import memo_core_common::*;
7
7
  private import memo_core_enumerations::*;
8
8
  private import memo_assurance_requirements::*;
9
+
10
+ // ISO 14971 / IEC 62366-1 risk-analysis input. A model element so hazards,
11
+ // scenarios, requirements, and DHF records can trace to the foreseeable
12
+ // misuse that motivated them. Its counterpart, IntendedUse, is now the
13
+ // operational-world root (memo_architecture_operational_structure::IntendedUse,
14
+ // a MemoMission).
15
+ part def ReasonablyForeseeableMisuse specializes MemoPart {
16
+ attribute misuseContext : String;
17
+ attribute foreseeableBasis : String;
18
+ attribute affectedUseContext : String;
19
+ }
20
+
9
21
  part def Risk specializes RiskDriver {
10
22
  attribute probabilityEstimate : ProbabilityKind;
11
23
  attribute severityEstimate : SeverityKind;
@@ -34,7 +34,7 @@ package memo_assurance_verification_validation {
34
34
  // Safety-critical functions must trace to verification (rules/coverage).
35
35
  connection def ExecutesScenario :> MemoRelationship {
36
36
  end verificationCase : VerificationCase :>> source;
37
- end scenario : MemoScenario :>> target;
37
+ end scenario : OperativeScenario :>> target;
38
38
  }
39
39
  abstract connection executesScenarioLinks : ExecutesScenario[*];
40
40
  metadata def <executesScenario> ExecutesScenarioMetadata :> SemanticMetadata {
@@ -78,7 +78,6 @@ package memo_core_common {
78
78
  // MemoPart so all existing content inherits the dimensions. ───
79
79
  part def RequirementDriver specializes MemoPart;
80
80
  abstract part def VerifiableElement specializes MemoPart;
81
- abstract part def ArchitectureElement specializes MemoPart;
82
81
  part def InterfaceElement specializes MemoPart;
83
82
  enum def EvidenceKind { enum testArtifact; enum evidence; enum formativeEvaluation; enum usabilityValidation; enum securityClaim; }
84
83
  part def MemoEvidence specializes MemoPart {
@@ -108,10 +107,15 @@ package memo_core_common {
108
107
  // description registers every MemoPart now carries: a title and its place
109
108
  // in a document. The former `shortDescription`/`longDescription` pair is
110
109
  // gone — short is inherited, and `description` IS the long form.
111
- part def DocumentedElement specializes MemoPart {
112
- attribute title : String;
113
- attribute documentUsage : String[*];
114
- attribute sectionIdentifier : String;
110
+ // Top-level goal a system or operation exists to fulfil, with its success
111
+ // criteria and context. Domain layers specialize it; the medical-device
112
+ // intended use (memo_architecture_operational_structure::IntendedUse) is a
113
+ // MemoMission. Specializes MemoPart directly — name/description/rationale
114
+ // already live there, so no DocumentedElement layer is needed.
115
+ abstract part def MemoMission specializes MemoPart {
116
+ attribute missionKind : String;
117
+ attribute successCriteria : String;
118
+ attribute operationalContext : String;
115
119
  }
116
120
 
117
121
  // ─── Construct-specific foundations (non-part metaclasses) ───────
@@ -79,12 +79,12 @@ package memo_core_relationships {
79
79
  // SystemFunction a part def with its behaviour stapled on through a
80
80
  // separate action def, and what makes `allocate <function> to <actor>` —
81
81
  // ARCADIA's own System Analysis mechanism — illegal, since Actor is a
82
- // MemoPart but not an ArchitectureElement.
82
+ // MemoPart but not a narrower part subtype.
83
83
  //
84
84
  // Several of the relaxed ends were ALREADY being violated by real content
85
- // before they were relaxed: `composes` links parts to WorkflowStep and
86
- // OperationalActivity (action defs) and to SoftwarePort/PhysicalPort;
87
- // `precedes` links OperationalActivity to OperationalActivity; `allocatedTo`
85
+ // before they were relaxed: `composes` links parts to OperativeAction
86
+ // (an action def) and to SoftwarePort/PhysicalPort;
87
+ // `precedes` links OperativeAction to OperativeAction; `allocatedTo`
88
88
  // has ActionUsage sources; `bindsToInterface` targets an `interface def`,
89
89
  // which an InterfaceElement-typed end cannot hold. The types were not
90
90
  // buying the strictness they appeared to buy.
@@ -160,7 +160,7 @@ package memo_core_relationships {
160
160
 
161
161
  connection def ThreatenedBy :> MemoRelationship {
162
162
  attribute threatRole : String;
163
- end protectedAsset : ArchitectureElement :>> source;
163
+ end protectedAsset : MemoPart :>> source;
164
164
  end realizedThreat : RequirementDriver :>> target;
165
165
  }
166
166
  abstract connection threatenedByLinks : ThreatenedBy[*];
@@ -218,8 +218,8 @@ package memo_core_relationships {
218
218
  }
219
219
 
220
220
  connection def HostedBy :> MemoRelationship {
221
- end processingNode : ArchitectureElement :>> source;
222
- end hostAssembly : ArchitectureElement :>> target;
221
+ end processingNode : MemoPart :>> source;
222
+ end hostAssembly : MemoPart :>> target;
223
223
  }
224
224
  abstract connection hostedByLinks : HostedBy[*];
225
225
  metadata def <hostedBy> HostedByMetadata :> SemanticMetadata {
@@ -248,7 +248,7 @@ package memo_core_relationships {
248
248
  }
249
249
 
250
250
  connection def AnalyzedBy :> MemoRelationship {
251
- end element : ArchitectureElement :>> source;
251
+ end element : MemoPart :>> source;
252
252
  end analysisArtifact : AnalysisArtifact :>> target;
253
253
  }
254
254
  abstract connection analyzedByLinks : AnalyzedBy[*];
@@ -5,11 +5,11 @@ package memo_methodology_workflow {
5
5
  private import memo_core_enumerations::*;
6
6
 
7
7
  // Named for its axis: this is a step in a METHODOLOGY workflow (a lifecycle
8
- // stage with entry/exit criteria), distinct from
9
- // memo_architecture_operational_workflows::WorkflowStep, which is a step in
10
- // an OPERATIONAL workflow performed by users. The two carry different
11
- // attributes and must not share a short name — an overloaded name resolves
12
- // by load order and silently validates a usage against the wrong type.
8
+ // stage with entry/exit criteria), distinct from an OPERATIONAL workflow's
9
+ // steps, which are OperativeActions performed by users or the system. The
10
+ // two carry different attributes and must not share a short name — an
11
+ // overloaded name resolves by load order and silently validates a usage
12
+ // against the wrong type.
13
13
  action def MethodologyWorkflowStep :> MemoAction {
14
14
  attribute stage : WorkflowStageKind;
15
15
  attribute objectiveDescription : String;