@memoarchitect/ontology 0.7.0 → 0.8.22

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 (204) hide show
  1. package/README.md +4 -2
  2. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +1 -1
  3. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +7 -5
  4. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +5 -5
  5. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +18 -8
  6. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +341 -99
  7. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +25 -11
  8. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +328 -271
  9. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +52 -11
  10. package/examples/gpca-pump/model/catalog/gpca_context.sysml +9 -0
  11. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +9 -5
  12. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +175 -259
  13. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +82 -58
  14. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +5 -10
  15. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +101 -100
  16. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +161 -0
  17. package/examples/gpca-pump/model/catalog/gpca_system.sysml +15 -2
  18. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +274 -331
  19. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +115 -35
  20. package/examples/gpca-pump/model/catalog/project.sysml +5 -0
  21. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +1 -1
  22. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +1 -1
  23. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +1 -1
  24. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +1 -1
  25. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +2 -2
  26. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +1 -1
  27. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +1 -1
  28. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +1 -1
  29. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +2 -2
  30. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +5 -2
  31. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +4 -2
  32. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +1 -1
  33. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +1 -1
  34. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +2 -2
  35. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +4 -2
  36. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +4 -2
  37. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +1 -1
  38. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +3 -2
  39. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -2
  40. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +133 -128
  41. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +139 -157
  42. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +56 -33
  43. package/examples/nested-architecture-dsm/model/catalog/traces.sysml +25 -26
  44. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -5
  45. package/examples/ros-mobile-robot/README.md +40 -0
  46. package/examples/ros-mobile-robot/model/catalog/project.sysml +33 -0
  47. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +296 -0
  48. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +7 -0
  49. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +13 -0
  50. package/examples/software-only-medical-device/model/catalog/project.sysml +4 -0
  51. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +11 -5
  52. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +56 -60
  53. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +1 -1
  54. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +10 -15
  55. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +7 -9
  56. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +42 -66
  57. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +56 -66
  58. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +26 -55
  59. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +3 -6
  60. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +0 -18
  61. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +51 -82
  62. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +21 -31
  63. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +12 -8
  64. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +28 -21
  65. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +57 -33
  66. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +102 -79
  67. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +5 -5
  68. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +21 -6
  69. package/examples/ui-screen-regions/model/catalog/relationships.sysml +8 -0
  70. package/examples/ui-screen-regions/model/catalog/traces.sysml +28 -125
  71. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +1 -1
  72. package/extensions/LICENSES/MIT.txt +19 -0
  73. package/extensions/README.md +94 -0
  74. package/extensions/aadl/memo.package.yaml +18 -0
  75. package/extensions/aadl/src/aadl_extension.sysml +6 -0
  76. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +147 -0
  77. package/extensions/aadl/src/methodology/aadl_methodology.sysml +17 -0
  78. package/extensions/aadl/src/runtime/memo_aadl_runtime.sysml +56 -0
  79. package/extensions/cloud/memo.package.yaml +18 -0
  80. package/extensions/cloud/src/cloud_extension.sysml +44 -0
  81. package/extensions/cloud/src/methodology/cloud_methodology.sysml +17 -0
  82. package/extensions/container/memo.package.yaml +18 -0
  83. package/extensions/container/src/container_extension.sysml +37 -0
  84. package/extensions/container/src/methodology/container_methodology.sysml +17 -0
  85. package/extensions/messaging/memo.package.yaml +18 -0
  86. package/extensions/messaging/src/messaging_extension.sysml +64 -0
  87. package/extensions/messaging/src/methodology/messaging_methodology.sysml +17 -0
  88. package/extensions/ros/memo.package.yaml +18 -0
  89. package/extensions/ros/src/methodology/ros_methodology.sysml +25 -0
  90. package/extensions/ros/src/ros_extension.sysml +200 -0
  91. package/extensions/template/src/extension.sysml +37 -0
  92. package/memo.manifest.yaml +13 -2
  93. package/methodologies/default/memo.package.yaml +1 -1
  94. package/methodologies/gpca/memo.package.yaml +1 -1
  95. package/ontology/memo.package.yaml +1 -1
  96. package/package.json +5 -3
  97. package/profile/memo.package.yaml +1 -1
  98. package/src/architecture/decisions/memo_decisions.sysml +23 -2
  99. package/src/architecture/functional/behavior/memo_behavior.sysml +49 -21
  100. package/src/architecture/functional/constraints/memo_constraints.sysml +3 -2
  101. package/src/architecture/functional/functions/memo_functions.sysml +91 -34
  102. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +46 -22
  103. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +37 -10
  104. package/src/architecture/implementation/ui/memo_ui.sysml +78 -38
  105. package/src/architecture/logical/interfaces/memo_interfaces.sysml +63 -11
  106. package/src/architecture/logical/structure/memo_logical_structure.sysml +21 -20
  107. package/src/architecture/operational/activities/memo_activities.sysml +10 -3
  108. package/src/architecture/operational/context/actors/memo_actors.sysml +5 -8
  109. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +13 -30
  110. package/src/architecture/operational/context/use_context/memo_use_context.sysml +42 -16
  111. package/src/architecture/operational/scenarios/memo_scenarios.sysml +57 -23
  112. package/src/architecture/operational/use_cases/memo_use_cases.sysml +35 -26
  113. package/src/architecture/operational/workflows/memo_workflows.sysml +29 -10
  114. package/src/architecture/realization/deployment/memo_deployment.sysml +111 -16
  115. package/src/architecture/realization/physical/memo_physical_architecture.sysml +27 -2
  116. package/src/artifacts/configuration_management/memo_configuration_management.sysml +16 -0
  117. package/src/artifacts/core/memo_controlled_artifacts.sysml +3 -1
  118. package/src/artifacts/standards/cfr_21_820.sysml +116 -0
  119. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +80 -0
  120. package/src/artifacts/standards/iec_60601_1.sysml +149 -0
  121. package/src/artifacts/standards/iec_60601_1_2.sysml +56 -0
  122. package/src/artifacts/standards/iec_60812.sysml +51 -0
  123. package/src/artifacts/standards/iec_62304.sysml +210 -0
  124. package/src/artifacts/standards/iec_62366_1.sysml +113 -0
  125. package/src/artifacts/standards/iec_81001_5_1.sysml +84 -0
  126. package/src/artifacts/standards/iso_13485.sysml +113 -0
  127. package/src/artifacts/standards/iso_14971.sysml +94 -0
  128. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +42 -0
  129. package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +132 -0
  130. package/src/artifacts/templates/dhf/21cfr820/design-input.md +1 -1
  131. package/src/artifacts/templates/dhf/21cfr820/design-output.md +5 -5
  132. package/src/artifacts/templates/dhf/21cfr820/design-review.md +1 -1
  133. package/src/artifacts/templates/dhf/21cfr820/design-validation.md +2 -2
  134. package/src/artifacts/templates/dhf/21cfr820/design-verification.md +2 -2
  135. package/src/artifacts/templates/dhf/21cfr820/dhf-index.md +2 -2
  136. package/src/artifacts/templates/dhf/21cfr820/transfer-plan.md +1 -1
  137. package/src/artifacts/templates/dhf/21cfr820/user-needs.md +1 -1
  138. package/src/artifacts/templates/dhf/21cfr820/vv-plan.md +3 -3
  139. package/src/artifacts/templates/dhf/21cfr820/vv-report.md +4 -4
  140. package/src/artifacts/templates/dhf/fda-cybersecurity/incident-response.md +1 -1
  141. package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +3 -2
  142. package/src/artifacts/templates/dhf/fda-cybersecurity/security-arch.md +2 -2
  143. package/src/artifacts/templates/dhf/fda-cybersecurity/threat-model.md +4 -4
  144. package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +4 -3
  145. package/src/artifacts/templates/dhf/iec-60601/hrs.md +170 -0
  146. package/src/artifacts/templates/dhf/iec-62304/detailed-design.md +1 -1
  147. package/src/artifacts/templates/dhf/iec-62304/integration-test.md +3 -3
  148. package/src/artifacts/templates/dhf/iec-62304/sad.md +6 -5
  149. package/src/artifacts/templates/dhf/iec-62304/sbom.md +3 -2
  150. package/src/artifacts/templates/dhf/iec-62304/sdp.md +5 -4
  151. package/src/artifacts/templates/dhf/iec-62304/soup.md +4 -2
  152. package/src/artifacts/templates/dhf/iec-62304/srs.md +54 -20
  153. package/src/artifacts/templates/dhf/iec-62304/sw-traceability.md +3 -3
  154. package/src/artifacts/templates/dhf/iec-62304/system-test.md +1 -1
  155. package/src/artifacts/templates/dhf/iec-62366/summative-eval.md +1 -1
  156. package/src/artifacts/templates/dhf/iec-62366/task-analysis.md +40 -4
  157. package/src/artifacts/templates/dhf/iec-62366/ue-plan.md +1 -1
  158. package/src/artifacts/templates/dhf/iec-62366/urra.md +3 -3
  159. package/src/artifacts/templates/dhf/iso-14971/fmea.md +42 -19
  160. package/src/artifacts/templates/dhf/iso-14971/har.md +3 -3
  161. package/src/artifacts/templates/dhf/iso-14971/rmp.md +2 -2
  162. package/src/artifacts/templates/dhf/system/sad.md +173 -0
  163. package/src/artifacts/templates/dhf/system/standards-checklist.md +87 -0
  164. package/src/artifacts/templates/dhf/system/standards-traceability.md +125 -0
  165. package/src/artifacts/templates/dhf/system/syrs.md +128 -0
  166. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +39 -20
  167. package/src/assurance/human_factors/memo_human_factors.sysml +29 -22
  168. package/src/assurance/requirements/memo_requirements.sysml +5 -2
  169. package/src/assurance/requirements/needs/memo_needs.sysml +1 -1
  170. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +118 -13
  171. package/src/assurance/safety_risk/memo_risk.sysml +78 -7
  172. package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +16 -0
  173. package/src/assurance/verification_validation/memo_assurance.sysml +17 -21
  174. package/src/core/annotations/memo_annotations.sysml +25 -6
  175. package/src/core/common/memo_common.sysml +121 -16
  176. package/src/core/consistency_rules/consistency_rules.sysml +1 -1
  177. package/src/core/dimensions/dimensions.sysml +12 -0
  178. package/src/core/enumerations/memo_enumerations.sysml +60 -14
  179. package/src/core/relationships/memo_relationships.sysml +199 -196
  180. package/src/memo_namespaces.sysml +30 -0
  181. package/src/methodology/core/memo_core.sysml +24 -0
  182. package/src/methodology/profiles/memo_profiles.sysml +1 -1
  183. package/src/rules/ontology/ontology_invariants.sysml +213 -1
  184. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +3 -3
  185. package/src/viewpoints/clinical/clinical_viewpoint.sysml +1 -1
  186. package/src/viewpoints/context/context_viewpoint.sysml +1 -1
  187. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +1 -1
  188. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +1 -0
  189. package/src/viewpoints/functional/functional_viewpoint.sysml +1 -1
  190. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +1 -1
  191. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +1 -1
  192. package/src/viewpoints/operational/operational_viewpoint.sysml +1 -1
  193. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +1 -1
  194. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +1 -1
  195. package/src/viewpoints/verification/verification_viewpoint.sysml +1 -1
  196. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +1 -1
  197. package/examples/extensions/README.md +0 -16
  198. package/examples/extensions/template/src/extension.sysml +0 -15
  199. package/examples/gpca-pump/gpca-pump.kpar +0 -0
  200. /package/{examples/extensions → extensions}/clinical/memo.package.yaml +0 -0
  201. /package/{examples/extensions → extensions}/clinical/src/clinical_extension.sysml +0 -0
  202. /package/{examples/extensions → extensions}/clinical/src/methodology/clinical_methodology.sysml +0 -0
  203. /package/{examples/extensions → extensions}/clinical/src/procedures/memo_clinical_procedures.sysml +0 -0
  204. /package/{examples/extensions → extensions}/template/memo.package.yaml +0 -0
@@ -0,0 +1,200 @@
1
+ // ROS 2 (Robot Operating System 2).
2
+ //
3
+ // The acceptance test for MEMO's extension point (plan §10.3): a whole
4
+ // technology stack — nodes, messages, topics, quality of service, services,
5
+ // actions, and
6
+ // containerized deployment — landing without a single change to a base
7
+ // relation. `BuildsInto`, `DeploysTo`, and `ProvidesEnvironment` are reused
8
+ // exactly as the base declares them.
9
+ //
10
+ // Composition is by MODULE LIST, not by chaining. `baseMethodology` is [0..1],
11
+ // but `includedModule` is [0..*], so this extension's methodology names
12
+ // `memo_extension_messaging` and `memo_extension_container` alongside its own
13
+ // module. ROS communication specializes native MEMO item, port, and interface
14
+ // families; it does not invent publish/subscribe relations.
15
+ package memo_extension_ros {
16
+ private import ScalarValues::*;
17
+
18
+ private import memo_core_common::*;
19
+ private import memo_architecture_functional_behavior::*;
20
+ private import memo_architecture_logical_interfaces::*;
21
+ private import memo_architecture_implementation_software_structure::*;
22
+ private import memo_architecture_implementation_software_runtime::*;
23
+ private import memo_extension_messaging::*;
24
+ private import memo_extension_container::*;
25
+
26
+ // ── Quality of service ──────────────────────────────────────────────
27
+ //
28
+ // QoS is the first real customer for "where do per-technology properties
29
+ // live" (plan C3, open question §14.6). The answer is a typed
30
+ // `attribute def` on the extension's own types — NOT the base's
31
+ // `PropertySet` stub, which was one String field and could not say what a
32
+ // reliability setting is. A typed profile can be validated, compared
33
+ // between a publisher and a subscriber, and read by a tool; a property bag
34
+ // cannot. `PropertySet` is deleted in this session for that reason.
35
+
36
+ // ROS 2 RELIABLE resends until delivery; BEST_EFFORT does not. This is
37
+ // the delivery guarantee, so it maps onto MessagingDeliveryKind:
38
+ // bestEffort is atMostOnce, reliable is atLeastOnce.
39
+ enum def RosReliabilityKind {
40
+ enum bestEffort;
41
+ enum reliable;
42
+ }
43
+ // TRANSIENT_LOCAL replays the last samples to a late-joining subscriber;
44
+ // VOLATILE does not. The difference decides whether a node that restarts
45
+ // sees the current state or waits for the next publication — which is a
46
+ // safety-relevant fact when the topic carries a latched mode or setpoint.
47
+ enum def RosDurabilityKind {
48
+ enum volatile;
49
+ enum transientLocal;
50
+ }
51
+
52
+ attribute def RosQosProfile {
53
+ attribute reliability : RosReliabilityKind;
54
+ attribute durability : RosDurabilityKind;
55
+ // The QoS contract: a sample is expected at least this often.
56
+ attribute deadlineMs : Real;
57
+ // How long a publisher may be silent before subscribers treat it as
58
+ // lost — ROS 2 liveliness lease duration.
59
+ attribute livelinessLeaseMs : Real;
60
+ // Depth of the history buffer, KEEP_LAST(n) / KEEP_ALL.
61
+ attribute historyDepth : Integer;
62
+ }
63
+
64
+ // ── Nodes, messages, topics, and endpoint roles ────────────────────
65
+
66
+ // A ROS node. `runtimeKind` is deliberately NOT bound: a node may run as
67
+ // its own process or be composed with others into a single container
68
+ // process, and which one it is is a design decision the model should
69
+ // record rather than a fact the type can assert.
70
+ part def RosNode specializes SoftwareComponent {
71
+ attribute nodeNamespace : String;
72
+ // Whether the node implements the managed-node lifecycle
73
+ // (unconfigured / inactive / active / finalized). A lifecycle-managed
74
+ // node can be brought up in a defined order and held inactive until
75
+ // its preconditions hold, which is how a robot reaches a safe state.
76
+ attribute lifecycleManaged : Boolean;
77
+ attribute executorModel : String;
78
+ }
79
+
80
+ // A definition is the ROS message contract (`LaserScan`, `Twist`, ...).
81
+ // A named item usage of that definition is a deployed topic (`/scan`).
82
+ // Individual deliveries are native flows/messages between ports that
83
+ // reference the same topic usage.
84
+ abstract item def RosMessage specializes MessagingMessage {
85
+ attribute rosTypeName : String;
86
+ }
87
+
88
+ port def RosPublisher specializes MessagingPublisher {
89
+ attribute offeredQos : RosQosProfile;
90
+ }
91
+
92
+ port def RosSubscriber specializes MessagingSubscriber {
93
+ attribute requestedQos : RosQosProfile;
94
+ }
95
+
96
+ interface def RosTopicInterface specializes MessagingTopicInterface {
97
+ end rosPublisher : RosPublisher :>> publisher;
98
+ end rosSubscriber : RosSubscriber :>> subscriber;
99
+ }
100
+
101
+ // ── Services: one correlated request/reply contract ────────────────
102
+ abstract item def RosServiceRequest specializes RosMessage;
103
+ abstract item def RosServiceResponse specializes RosMessage;
104
+
105
+ port def RosServiceClient specializes SoftwarePort {
106
+ out item request : RosServiceRequest;
107
+ in item response : RosServiceResponse;
108
+ attribute serviceName : String;
109
+ attribute timeoutMs : Real;
110
+ }
111
+
112
+ port def RosServiceServer specializes SoftwarePort {
113
+ in item request : RosServiceRequest;
114
+ out item response : RosServiceResponse;
115
+ attribute serviceName : String;
116
+ }
117
+
118
+ interface def RosServiceInterface specializes SoftwareInterface {
119
+ end client : RosServiceClient :>> source;
120
+ end server : RosServiceServer :>> target;
121
+ flow of RosServiceRequest from client.request to server.request;
122
+ flow of RosServiceResponse from server.response to client.response;
123
+ }
124
+
125
+ // ── Actions: long-running goal protocol ─────────────────────────────
126
+ // ROS 2 realizes an action through goal/result/cancel services plus
127
+ // feedback/status topics. The port exposes those distinct native message
128
+ // features, so an action cannot be mistaken for a two-message service.
129
+ abstract item def RosActionGoal specializes RosMessage;
130
+ abstract item def RosActionAcceptance specializes RosMessage;
131
+ abstract item def RosActionFeedback specializes RosMessage;
132
+ abstract item def RosActionResult specializes RosMessage;
133
+ abstract item def RosActionCancel specializes RosMessage;
134
+ abstract item def RosActionStatus specializes RosMessage;
135
+
136
+ port def RosActionClient specializes SoftwarePort {
137
+ out item goal : RosActionGoal;
138
+ in item acceptance : RosActionAcceptance;
139
+ in item feedback : RosActionFeedback;
140
+ in item result : RosActionResult;
141
+ out item cancel : RosActionCancel;
142
+ in item actionStatus : RosActionStatus;
143
+ attribute actionName : String;
144
+ }
145
+
146
+ port def RosActionServer specializes SoftwarePort {
147
+ in item goal : RosActionGoal;
148
+ out item acceptance : RosActionAcceptance;
149
+ out item feedback : RosActionFeedback;
150
+ out item result : RosActionResult;
151
+ in item cancel : RosActionCancel;
152
+ out item actionStatus : RosActionStatus;
153
+ attribute actionName : String;
154
+ }
155
+
156
+ interface def RosActionInterface specializes SoftwareInterface {
157
+ end client : RosActionClient :>> source;
158
+ end server : RosActionServer :>> target;
159
+ flow of RosActionGoal from client.goal to server.goal;
160
+ flow of RosActionAcceptance from server.acceptance to client.acceptance;
161
+ flow of RosActionFeedback from server.feedback to client.feedback;
162
+ flow of RosActionCancel from client.cancel to server.cancel;
163
+ flow of RosActionResult from server.result to client.result;
164
+ flow of RosActionStatus from server.actionStatus to client.actionStatus;
165
+ }
166
+
167
+ abstract state def RosActionExecution specializes MemoState;
168
+ state def RosActionAccepted specializes RosActionExecution;
169
+ state def RosActionExecuting specializes RosActionExecution;
170
+ state def RosActionCanceling specializes RosActionExecution;
171
+ state def RosActionSucceeded specializes RosActionExecution;
172
+ state def RosActionCanceled specializes RosActionExecution;
173
+ state def RosActionAborted specializes RosActionExecution;
174
+
175
+ // ── Deployment ──────────────────────────────────────────────────────
176
+ //
177
+ // Nothing below declares a relation. The base's three deployment
178
+ // relations already say everything a ROS deployment needs:
179
+ // BuildsInto SoftwareModule -> RosContainerImage
180
+ // DeploysTo RosContainerImage -> ProcessingNode
181
+ // ProvidesEnvironment ProcessingNode -> RosContainerRuntime
182
+ // That is the proof the base is factored correctly.
183
+ part def RosContainerImage specializes ContainerImage {
184
+ // humble, iron, jazzy, rolling.
185
+ attribute rosDistribution : String;
186
+ // The workspace overlay the image was built from.
187
+ attribute workspaceOverlay : String;
188
+ }
189
+
190
+ part def RosContainerRuntime specializes ContainerRuntime {
191
+ attribute rosDistribution : String;
192
+ // The RMW implementation below ROS 2 — rmw_fastrtps_cpp,
193
+ // rmw_cyclonedds_cpp. QoS is enforced here, so it is part of any
194
+ // argument that a QoS profile is actually honoured.
195
+ attribute rmwImplementation : String;
196
+ // ROS_DOMAIN_ID. Two robots sharing a domain see each other's topics,
197
+ // which is a hazard on a shared network and not visible in any node.
198
+ attribute rosDomainId : Integer;
199
+ }
200
+ }
@@ -0,0 +1,37 @@
1
+ // Skeleton for a new MEMO extension. Copy the directory, rename the packages,
2
+ // and replace the prefix.
3
+ //
4
+ // Two conventions this file follows and every extension must (extensions/README.md):
5
+ //
6
+ // 1. Every definition an extension declares is prefixed with the PascalCase
7
+ // form of the extension's directory name — `template/` gives `Template`.
8
+ // Extension names share one flat namespace with the base and with each
9
+ // other, so the prefix is what keeps two independent extensions from both
10
+ // declaring `Node`.
11
+ // 2. A relation an extension declares specializes a base relation. It never
12
+ // roots independently.
13
+ //
14
+ // This package used to bind `baseMethodName = "MedicalDeviceLightDefault"` — a
15
+ // pre-flip spelling that resolves to nothing. It went unnoticed for as long as
16
+ // extensions lived under `examples/`, where the build did not check them; the
17
+ // build checks `extensions/` now, and reported it on the first run.
18
+ package memo_extension_template {
19
+ private import ScalarValues::*;
20
+ private import memo_core_enumerations::*;
21
+ private import memo_methodology_core::*;
22
+ private import memo_methodology_profiles::*;
23
+
24
+ part extensionMethod : MethodologyDefinition {
25
+ attribute :>> id = "EXT-METH-001";
26
+ attribute :>> name = "ExtensionMethod";
27
+ attribute :>> version = "0.1.0";
28
+ attribute :>> domain = "project extension";
29
+ attribute :>> description = "Adds a project or domain package to the selected MEMO methodology.";
30
+ // The base is a typed SysML reference, not a name held in sync by hand.
31
+ ref :>> baseMethodology = mdDefaultDefinition;
32
+ // An extension adds its own module to whatever its base selected;
33
+ // saying so explicitly is required now that an empty list means empty.
34
+ attribute :>> scopeMode = ScopeModeKind::explicit;
35
+ attribute :>> includedModule = "replace_with_extension_package";
36
+ }
37
+ }
@@ -19,5 +19,16 @@ examples:
19
19
  standard-sysml-diagrams: ./examples/sysml-diagram-samples
20
20
  ui-screen-regions: ./examples/ui-screen-regions
21
21
  nested-architecture-dsm: ./examples/nested-architecture-dsm
22
- extension-template: ./examples/extensions/template
23
- clinical-extension: ./examples/extensions/clinical
22
+ ros-mobile-robot: ./examples/ros-mobile-robot
23
+ # Extensions are a way to MODEL, not a thing to copy. They are reusable
24
+ # ontology packages that specialize the base, selected by a methodology or a
25
+ # project binding — so they sit beside the ontology, not under examples/.
26
+ # `examples/ros-mobile-robot` demonstrates using one; it is not the extension.
27
+ extensions:
28
+ template: ./extensions/template
29
+ clinical: ./extensions/clinical
30
+ aadl: ./extensions/aadl
31
+ cloud: ./extensions/cloud
32
+ container: ./extensions/container
33
+ messaging: ./extensions/messaging
34
+ ros: ./extensions/ros
@@ -7,7 +7,7 @@
7
7
  # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
8
  # removed at the native semantic flip and are now rejected if present.
9
9
  name: '@memoarchitect/methodology-default'
10
- version: 0.7.0
10
+ version: 0.8.22
11
11
  description: "MEMO default medical-device methodology \u2014 selects viewpoints/views/DHF documents from @memoarchitect/ontology and adds rules, gates, patterns, profiles, and workflow."
12
12
  license: MIT
13
13
  tags:
@@ -7,7 +7,7 @@
7
7
  # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
8
  # removed at the native semantic flip and are now rejected if present.
9
9
  name: '@memoarchitect/methodology-gpca'
10
- version: 0.7.0
10
+ version: 0.8.22
11
11
  description: "GPCA infusion pump methodology \u2014 subtraction-based tailoring of @memoarchitect/methodology-default for the non-networked prototype variant. Excludes cybersecurity and SOUP."
12
12
  license: MIT
13
13
  tags:
@@ -7,7 +7,7 @@
7
7
  # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
8
  # removed at the native semantic flip and are now rejected if present.
9
9
  name: '@memoarchitect/ontology'
10
- version: 0.7.0
10
+ version: 0.8.22
11
11
  description: "MEMO \u2014 the single canonical medical-device ontology: core semantics, the Arcadia-inspired architecture layers (context, requirements, behavior, structure, interfaces, risk, cybersecurity,\
12
12
  \ assurance, \u2026), compliance, viewpoints, views, and invariant rules. One namespace (memo::), one src/ tree."
13
13
  license: MIT
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@memoarchitect/ontology",
3
- "version": "0.7.0",
3
+ "version": "0.8.22",
4
4
  "packageManager": "pnpm@9.15.0",
5
5
  "description": "MEMO \u2014 Medical Engineering Modelling Ontology. Pure SysML v2 medical-device ontology with native constraints, portable to any conformant SysML v2 tool (SysIDE, SysON, sysand).",
6
6
  "scripts": {
7
7
  "build": "bash scripts/build-kpar.sh",
8
- "check": "bash scripts/build-kpar.sh",
8
+ "check": "bash scripts/build-kpar.sh && npm run lint",
9
+ "lint": "node ../memo-tools/packages/tools/lib/bin/memo.js dhf lint",
9
10
  "test": "node --test test/package.test.mjs",
10
11
  "docs:api": "node scripts/generate-sysml-api.mjs",
11
12
  "docs:diagrams": "node scripts/generate-reference-diagrams.mjs",
@@ -69,6 +70,7 @@
69
70
  "src/viewpoints/",
70
71
  "src/memo_namespaces.sysml",
71
72
  "templates/",
72
- "examples/"
73
+ "examples/",
74
+ "extensions/"
73
75
  ]
74
76
  }
@@ -7,7 +7,7 @@
7
7
  # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
8
  # removed at the native semantic flip and are now rejected if present.
9
9
  name: '@memoarchitect/medical-modeling-profile'
10
- version: 0.7.0
10
+ version: 0.8.22
11
11
  description: Closure rules and viewpoints for medical device modeling
12
12
  license: MIT
13
13
  tags:
@@ -1,4 +1,5 @@
1
1
  package memo_architecture_decisions {
2
+ private import Metaobjects::SemanticMetadata;
2
3
  private import ScalarValues::*;
3
4
 
4
5
  private import memo_core_common::*;
@@ -13,7 +14,27 @@ package memo_architecture_decisions {
13
14
  }
14
15
 
15
16
  connection def DecisionRecordedInADR :> MemoRelationship {
16
- end decision : DesignDecision;
17
- end adr : ADRArtifact;
17
+ end decision : DesignDecision :>> source;
18
+ end adr : ADRArtifact :>> target;
19
+ }
20
+ abstract connection decisionRecordedInADRLinks : DecisionRecordedInADR[*];
21
+ metadata def <decisionRecordedInADR> DecisionRecordedInADRMetadata :> SemanticMetadata {
22
+ :> annotatedElement : SysML::ConnectionDefinition;
23
+ :> annotatedElement : SysML::ConnectionUsage;
24
+ :>> baseType = decisionRecordedInADRLinks meta SysML::Usage;
25
+ }
26
+
27
+ // ── Relations owned by this package ─────────────────────────────
28
+ // Moved out of memo_core_relationships: their ends are typed against
29
+ // types declared here, and core must not depend on a domain package.
30
+ connection def Decides :> MemoRelationship {
31
+ end decision : DesignDecision :>> source;
32
+ end affectedElement : MemoPart :>> target;
33
+ }
34
+ abstract connection decidesLinks : Decides[*];
35
+ metadata def <decides> DecidesMetadata :> SemanticMetadata {
36
+ :> annotatedElement : SysML::ConnectionDefinition;
37
+ :> annotatedElement : SysML::ConnectionUsage;
38
+ :>> baseType = decidesLinks meta SysML::Usage;
18
39
  }
19
40
  }
@@ -3,29 +3,50 @@ package memo_architecture_functional_behavior {
3
3
 
4
4
  private import memo_core_common::*;
5
5
  private import memo_core_enumerations::*;
6
+
7
+ // Typed functional execution step. Project-specific action definitions
8
+ // specialize this rather than bypassing MemoAction; ActivityFlow remains
9
+ // the composite route that sequences such steps.
10
+ abstract action def FunctionalAction specializes MemoAction;
6
11
  // State machines and their mode states are SysML v2 states (behaviours), so
7
12
  // they derive from the MemoState foundation, not the part-based
8
13
  // ArchitectureElement. Transitions stay part-based (below) to keep their
9
14
  // traceable safety attributes.
10
- // State-machine vocabulary. ModeState denotes a state owned by this model.
15
+ // State machines retain their own execution semantics; individual modes
16
+ // are MemoState usages selected by stateKind.
11
17
  state def StateMachine :> MemoState {
12
18
  attribute machineKind : String;
13
19
  attribute executionSemantics : String;
14
20
  }
15
- state def ModeState :> MemoState {
16
- attribute modeKind : String;
17
- attribute entryCondition : String;
18
- attribute exitCondition : String;
21
+ // A configuration is the concrete selection made at a `variation` choice
22
+ // point. It remains separate from a mode state: it says which mode and
23
+ // elements are active in one selectable arrangement.
24
+ // The reference is typed to the shared native state family so a consumer
25
+ // can navigate from the selected configuration to its governing mode.
26
+ part def ModeConfiguration specializes ArchitectureElement {
27
+ ref activeMode : MemoState[1];
28
+ ref activeElement : MemoPart[0..*];
19
29
  }
20
- part def Transition specializes ArchitectureElement {
30
+ // Transitions are native SysML v2 `transition` usages inside the owning
31
+ // state — there is no `part def Transition`, and its `transition` keyword
32
+ // collision is why. A transition usage's definition is always implicit, so
33
+ // it has no MEMO supertype to carry the identification core; this record
34
+ // carries it instead, applied with `@TransitionRecord`.
35
+ //
36
+ // `trigger`, `guardSummary`, and `effectSummary` are prose summaries, not
37
+ // executable semantics: a guard reading "none in source (MEMO extension
38
+ // REQ-X-02 additionally gates therapy on POST)" is a citation. Formal
39
+ // triggers and guards belong in native `accept` and `if`; these stay
40
+ // records so the two are not confused.
41
+ metadata def TransitionRecord {
42
+ attribute id : String;
43
+ attribute name : String;
21
44
  attribute trigger : String;
22
45
  attribute guardSummary : String;
23
46
  attribute effectSummary : String;
24
- attribute priority : Integer;
25
- attribute sameStepCritical : Boolean;
26
- attribute sourceState : String;
27
- attribute targetState : String;
47
+ attribute sourceReference : String;
28
48
  }
49
+
29
50
  // A verifiable behavioural constraint, such as an invariant, transition
30
51
  // rule, temporal claim, assumption, or guarantee.
31
52
  part def BehaviorProperty specializes VerifiableElement {
@@ -34,7 +55,21 @@ package memo_architecture_functional_behavior {
34
55
  attribute formalExpression : String;
35
56
  }
36
57
  part def Contract specializes VerifiableElement { attribute contractScope : String; }
37
- part def PropertySet specializes VerifiableElement { attribute propertySetScope : String; }
58
+ // `part def PropertySet specializes VerifiableElement { attribute
59
+ // propertySetScope : String; }` stood here and is DELETED (plan C3,
60
+ // open question §14.6). It was AADL's property-set idea imported as a
61
+ // name: one String field, no typed content, no binding to whatever it
62
+ // annotated, and zero usages anywhere in the tree.
63
+ //
64
+ // Per-technology properties belong on the extension type that owns them,
65
+ // typed. ROS QoS was the first real customer and settled it:
66
+ // `attribute def RosQosProfile` has reliability, durability, deadline,
67
+ // liveliness and history depth as typed fields, so a publisher's offer and
68
+ // a subscriber's request can be compared. A `propertySetScope` String
69
+ // could not have expressed one of them. Where an extension needs to
70
+ // annotate a BASE element rather than declare its own type, the SysML-
71
+ // native answer is `metadata def` + `Metaobjects::SemanticMetadata`, which
72
+ // is what every MEMO relation already carries since A4.
38
73
  part def ActivityAction specializes ArchitectureElement {
39
74
  attribute actionKind : ActionKind;
40
75
  attribute inputSummary : String;
@@ -47,20 +82,13 @@ package memo_architecture_functional_behavior {
47
82
  attribute guardCondition : String;
48
83
  attribute weight : String;
49
84
  }
50
- // UIScenario now lives in memo_architecture_implementation_ui (:> MemoScenario).
51
- part def InteractionMessage specializes MemoPart {
52
- attribute messageKind : MessageKind;
53
- attribute sequenceOrder : Integer;
54
- attribute senderComponent : String;
55
- attribute receiverComponent : String;
56
- attribute exchangeItem : String;
57
- attribute timingConstraintMs : String;
58
- }
85
+ // UI scenarios are MemoScenario usages with scenarioKind `ui`.
86
+
59
87
  part def TimingConstraint specializes VerifiableElement {
60
88
  attribute constraintKind : TimingConstraintKind;
61
89
  attribute minMs : String;
62
90
  attribute maxMs : String;
63
- attribute referenceElement : String;
91
+ ref referenceElement : MemoPart[1];
64
92
  attribute verificationMethod : VerificationMethodKind;
65
93
  }
66
94
  }
@@ -1,13 +1,14 @@
1
1
  package memo_architecture_functional_constraints {
2
2
  private import ScalarValues::*;
3
+ private import memo_core_common::*;
3
4
 
4
5
  doc /* Reusable quantitative constraint definitions. */
5
6
 
6
- constraint def MaxResponseTimeConstraint {
7
+ constraint def MaxResponseTimeConstraint :> MemoConstraint {
7
8
  attribute responseTimeMs : Real;
8
9
  attribute maxAllowedMs : Real;
9
10
  }
10
- constraint def LockoutIntervalConstraint {
11
+ constraint def LockoutIntervalConstraint :> MemoConstraint {
11
12
  attribute elapsedMs : Real;
12
13
  attribute lockoutMs : Real;
13
14
  }
@@ -1,10 +1,56 @@
1
- // Functional architecture (§9). A SystemFunction is a technology-independent
2
- // responsibility of the system; a SystemAction is executable behavior realizing
3
- // a function; a FunctionalExchange is a typed transfer between functions. A
4
- // function may be realized by human action, mechanical design, electrical
5
- // hardware, software, or a combination — allocation is optional and never
6
- // assumes software.
1
+ // Functional architecture (§9). A function is a responsibility: what the
2
+ // system, or one of its components, is answerable for. A FunctionalExchange is
3
+ // a typed transfer between functions. A function may be realized by human
4
+ // action, mechanical design, electrical hardware, software, or a combination —
5
+ // allocation to the system's own parts is what ComponentFunction records, and
6
+ // it never assumes software.
7
+ //
8
+ // ─── A function is a behaviour ───────────────────────────────────────────
9
+ //
10
+ // `MemoFunction` and both its specializations are `action def`s. They were
11
+ // `part def SystemFunction specializes ArchitectureElement` until Track A0
12
+ // removed the reason: relation ends were typed on MemoPart/ArchitectureElement,
13
+ // KerML forbids a behaviour from specializing a part-based type, and a function
14
+ // has to be satisfiable, verifiable, and allocatable. So a function was declared
15
+ // a part, and a separate `action def SystemAction` carried the behaviour with a
16
+ // `ref performedFunction` stapling the two back together — a reference used in
17
+ // ZERO example files. The ends are metaclass-neutral now (CR-ONT-060..073), so
18
+ // the split has no cause and is gone: SystemAction is merged into the function
19
+ // family, and its `actionKind` moved onto MemoFunction where it was always
20
+ // describing the function anyway.
21
+ //
22
+ // `functionCategory` and `actionKind` are NOT two spellings of one axis, and
23
+ // merging them would lose information. `actionKind` is the verb — sense,
24
+ // compute, actuate, route. `functionCategory` is the domain grouping the
25
+ // project argues in — therapy, alarm, platform, protection. A function can be
26
+ // `sense` in the `protection` category, and a safety case reasons about both.
27
+ //
28
+ // ─── System function vs. component function ──────────────────────────────
29
+ //
30
+ // ARCADIA's functional chain does not stop at the system boundary: system
31
+ // functions decompose until each piece is the responsibility of exactly one
32
+ // component. MEMO names the two ends of that chain because they obey different
33
+ // rules, not because they carry different attributes:
34
+ //
35
+ // SystemFunction — a responsibility of the system as a whole.
36
+ // Technology-independent. Allocation is OPTIONAL, and a
37
+ // system function may be realized by several components,
38
+ // by a human, or by mechanism.
39
+ // ComponentFunction — a responsibility of ONE component: a flowmeter's
40
+ // "measure flow rate", a subsystem's "arbitrate alarms".
41
+ // Allocation is MANDATORY and single-valued (CR-ONT-074).
42
+ //
43
+ // That difference is structural, which is why these are two definitions rather
44
+ // than one definition carrying a `functionLevel` enum. An enum member cannot
45
+ // change a multiplicity, and "is answerable to exactly one component" is the
46
+ // whole content of the concept.
47
+ //
48
+ // Decomposition and allocation reuse the existing relations and need no new
49
+ // ones — `Composes` for the function tree, `AllocatedTo` for the component.
50
+ // Both had part-typed ends until A0; both are metaclass-neutral now, which is
51
+ // precisely what makes an action-def function usable at all.
7
52
  package memo_architecture_functional_functions {
53
+ private import Metaobjects::SemanticMetadata;
8
54
  private import ScalarValues::*;
9
55
 
10
56
  private import memo_core_common::*;
@@ -13,31 +59,53 @@ package memo_architecture_functional_functions {
13
59
  private import memo_architecture_operational_activities::*;
14
60
  private import memo_architecture_operational_scenarios::*;
15
61
 
16
- part def SystemFunction specializes ArchitectureElement {
62
+ abstract action def MemoFunction specializes MemoAction {
17
63
  attribute functionCategory : String;
64
+ attribute actionKind : ActionKind;
18
65
  attribute trigger : String;
19
66
  attribute outputSummary : String;
20
67
  attribute concernKind : ConcernKind;
21
68
  attribute criticality : CriticalityKind;
22
69
  }
23
70
 
24
- // Executable behavior realizing a system function.
25
- action def SystemAction specializes MemoAction {
26
- attribute actionKind : ActionKind;
27
- attribute executionSummary : String;
28
- ref performedFunction : SystemFunction[0..1];
29
- }
71
+ // A responsibility of the system as a whole. Allocation is optional: a
72
+ // system function that no single component owns is a normal intermediate
73
+ // state of the functional chain, not a defect.
74
+ action def SystemFunction specializes MemoFunction;
75
+
76
+ // A responsibility of exactly one component. `AllocatedTo` names that
77
+ // component; CR-ONT-074 requires it. A component function that reaches no
78
+ // component is a responsibility nobody has accepted.
79
+ action def ComponentFunction specializes MemoFunction;
30
80
 
31
81
  // Named traceable route between functions. Native `flow of` usages carry
32
- // the transported item; this element exists for budgets and assurance
33
- // attributes that a flow usage cannot own.
82
+ // the transported item; this element exists for the budgets and assurance
83
+ // attributes below.
84
+ //
85
+ // The reason is MEMO's grammar, NOT the language — the earlier wording here
86
+ // said "attributes that a flow usage cannot own", and that was a false
87
+ // claim about SysML v2. The standard's `FlowUsage` is
88
+ // `OccurrenceUsagePrefix 'flow' FlowDeclaration DefinitionBody`
89
+ // (SysML-textual-bnf.kebnf:829), so a conforming flow usage takes a name
90
+ // from its `UsageDeclaration` and owns attributes in its body like any
91
+ // other usage. MEMO's own production is
92
+ // `'flow' 'of' itemType 'from' … 'to' … ';'` — no name, no body — so a
93
+ // MEMO flow can carry neither an `id` nor a latency budget, and nothing
94
+ // can refer to it. Every MEMO element rests on the identification core in
95
+ // memo_core_common, and an anonymous attribute-less edge cannot join it.
96
+ //
97
+ // So this part def is a workaround for a MEMO gap, not a design MEMO is
98
+ // entitled to. Restoring the two dropped clauses is what would let it
99
+ // collapse into the flow it stands in for.
34
100
  part def FunctionalExchange specializes ArchitectureElement {
35
101
  attribute flowKind : FlowKind;
36
102
  attribute latencyBudgetMs : Real;
37
103
  attribute staleAfterMs : Real;
38
104
  attribute integrityLevel : String;
39
- ref sourceFunction : SystemFunction[0..1];
40
- ref targetFunction : SystemFunction[0..1];
105
+ // MemoFunction, not SystemFunction: an exchange between two component
106
+ // functions is the ordinary case once the chain is decomposed.
107
+ ref sourceFunction : MemoFunction[0..1];
108
+ ref targetFunction : MemoFunction[0..1];
41
109
  }
42
110
 
43
111
  // A system function enables operational work; it does not perform it.
@@ -51,24 +119,13 @@ package memo_architecture_functional_functions {
51
119
  attribute securityRelevant : Boolean;
52
120
  }
53
121
  action def FunctionalFlowStep specializes MemoAction {
54
- ref function : SystemFunction[0..1];
122
+ ref function : MemoFunction[0..1];
55
123
  ref exchange : FunctionalExchange[0..1];
56
- ref item exchangedItem : MemoExchangeItem[0..1];
124
+ ref item exchangedItem : MemoItem[0..1];
57
125
  }
58
126
 
59
- // The functional-layer scenario selects one functional route and realizes
60
- // an operative scenario. It is the "what the system does" path, not a
61
- // logical component interaction.
62
- action def FunctionalScenario specializes MemoScenario {
63
- ref selectedFlow : FunctionalFlow[0..1];
64
- }
65
- connection def IncludesStep :> MemoRelationship {
66
- end functionalFlow : FunctionalFlow;
67
- end step : FunctionalFlowStep;
68
- }
69
- connection def InvolvesFunction :> MemoRelationship {
70
- end functionalFlow : FunctionalFlow;
71
- end function : SystemFunction;
72
- }
73
- // Compatibility spelling used by existing models.
127
+ // `InvolvesFunction` is native `perform` (R10-S6): a `FunctionalFlow`
128
+ // already names its functions via its step chain
129
+ // (`perform <step>;` + the step's own `ref function`), and a flow with no
130
+ // step chain performs its functions directly.
74
131
  }