@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,94 @@
1
+ # Extensions
2
+
3
+ An extension is a **way to model**, not a sample. It is a reusable ontology
4
+ package that specializes the base and is selected by a methodology or a project
5
+ binding — so extensions live here, beside `src/`, and not under `examples/`.
6
+ Examples *use* extensions; `examples/ros-mobile-robot` demonstrates one.
7
+
8
+ MEMO defines no extension metaclass. An extension is a plain SysML package:
9
+
10
+ - outside `src/` and outside the `memo::` namespace;
11
+ - with a `memo.package.yaml` carrying identity and `sysmlDir` only (the semantic
12
+ fields `type` / `extends` / `usage` / `ontologies` / `methodology` / `modules`
13
+ are rejected);
14
+ - whose SysML **specializes** base types;
15
+ - plus a `MethodologyDefinition` naming `baseMethodology`, `scopeMode`, and its
16
+ own `includedModule`.
17
+
18
+ `template/` is the skeleton. The build round-trips every extension into its own
19
+ KPAR and resolves it with `syside check`, exactly as it does the base.
20
+
21
+ ## Composition happens at the project binding
22
+
23
+ `MethodologyDefinition.baseMethodology` is `[0..1]` — single inheritance, and
24
+ deliberate. Extensions therefore **do not chain**. Both
25
+ `MethodologyDefinition.includedModule` and `ProjectMethodBinding.includedModule`
26
+ are `String[0..*]`, so a project combines any number of independent extensions
27
+ by listing their modules in its own binding. That is *the* composition
28
+ mechanism; nothing else is supported.
29
+
30
+ ## Rule 1 — use native mechanisms first; extension relations specialize base ones
31
+
32
+ An extension **may** declare `connection def`s and `allocation def`s when the
33
+ domain adds a relationship SysML does not already express. It must first use
34
+ native ports, interfaces, flows, messages, allocations, and dependencies. ROS
35
+ is the worked example: publisher/subscriber roles are directional ports, the
36
+ message is an item definition, the named topic is an item usage, and native
37
+ interfaces/flows connect them. No ROS publish/subscribe relation exists.
38
+ The OMG's own `Domain Libraries/Requirement Derivation` ships a `connection def`
39
+ next to a `metadata def :> SemanticMetadata` — domain relations are the
40
+ sanctioned extension mechanism in SysML v2 too.
41
+
42
+ The constraint is on where they root:
43
+
44
+ > **A relation declared by an extension specializes a base MEMO relation. It
45
+ > never roots independently.**
46
+
47
+ For a genuinely new relation, `connection def DomainRelation :> MemoLink` is
48
+ correct; `connection def DomainRelation { … }` is not. Rooting independently would give
49
+ the relation no identification core, no place in the relationship registry, and
50
+ no ends the base can reason about — a conforming tool would read it as opaque,
51
+ which is the same defect §2 of the plan names in the base itself. Give each one
52
+ a `metadata def <keyword> … :> SemanticMetadata` as well, for the same reason
53
+ every base relation has one.
54
+
55
+ The previous guard here was `assert.doesNotMatch(clinical, /connection def/)` —
56
+ a regression check on one example that had grown into an apparent rule. The
57
+ test now enforces the rule written above instead of the accident it was
58
+ guarding.
59
+
60
+ ## Rule 2 — every definition carries the extension's prefix
61
+
62
+ > **An extension's definition names all begin with the PascalCase form of its
63
+ > directory name.**
64
+
65
+ `clinical/` gives `ClinicalProcedureWorkflow`, `ros/` gives `RosNode`, `aadl/`
66
+ gives `AadlThread`. Definition names share one flat namespace with the base and
67
+ with every other extension, so without a prefix two independent extensions could
68
+ both declare `Node` and a project could not include both. The uniqueness check
69
+ compares each extension against the base *and* against every other extension;
70
+ the prefix is what makes that check something an author can satisfy by
71
+ construction rather than by luck.
72
+
73
+ Enumeration literals are not definitions and are not prefixed —
74
+ `RosReliabilityKind::reliable`, not `RosReliabilityKind::rosReliable`.
75
+
76
+ ## What an extension must not do
77
+
78
+ - Redefine or restate what the base already expresses — specialize it.
79
+ - Declare a definition name the base or another extension declares.
80
+ - Carry semantic YAML. Identity and `sysmlDir` are the whole descriptor.
81
+
82
+ ## The extensions that ship
83
+
84
+ | Directory | Prefix | What it adds |
85
+ | --- | --- | --- |
86
+ | `template/` | `Template` | The skeleton to copy. |
87
+ | `clinical/` | `Clinical` | Clinical-procedure data on the base operational workflow. |
88
+ | `aadl/` | `Aadl` | The AADL (SAE AS5506) correspondence profile: MEMO names mapped to AADL categories, plus the process / thread / virtual-processor component families. |
89
+ | `cloud/` | `Cloud` | Networked services and managed data stores. |
90
+ | `ros/` | `Ros` | ROS 2: nodes, messages, directional ports, topic/service/action interfaces, QoS, and containerized deployment. |
91
+
92
+ `aadl`, `cloud`, and `ros` between them are where the twelve runtime-technology
93
+ attributes that used to sit on `SoftwareComponent` now live — see
94
+ `plans/reference/memo-r1-arcadia-residue.md`.
@@ -0,0 +1,18 @@
1
+ # Application/distribution descriptor for this MEMO package.
2
+ #
3
+ # Identity and location only. It records what this package is called, what
4
+ # version it is, and where its SysML source sits so a resolver can find it.
5
+ # It does not select model content: the project's native SysML imports and its
6
+ # ProjectMethodBinding decide what is in the model. Semantic fields
7
+ # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
+ # removed at the native semantic flip and are now rejected if present.
9
+ name: '@memoarchitect/extension-aadl'
10
+ version: 0.8.22
11
+ description: AADL (SAE AS5506) correspondence profile and runtime component families
12
+ license: MIT
13
+ tags:
14
+ - memo
15
+ - methodology
16
+ - extension
17
+ - aadl
18
+ sysmlDir: ./src
@@ -0,0 +1,6 @@
1
+ // The AADL extension's public facade. A project includes the module
2
+ // `memo_extension_aadl` in its binding and imports this package.
3
+ package memo_extension_aadl {
4
+ public import memo_extension_aadl_runtime::*;
5
+ public import memo_extension_aadl_correspondence::*;
6
+ }
@@ -0,0 +1,147 @@
1
+ // The AADL correspondence profile (plan §C5).
2
+ //
3
+ // `memo_software_runtime.sysml` pointed at `examples/aadl-mapping` for a long
4
+ // time, and that directory never existed. A dangling pointer to a profile is
5
+ // worse than no profile, so this is the profile.
6
+ //
7
+ // It is written as model content, not prose: each correspondence is a
8
+ // `CorrespondenceRule` — MEMO's own ISO/IEC/IEEE 42010 element for relating
9
+ // elements across architecture descriptions — carrying the MEMO name, the AADL
10
+ // name, and the direction. That makes the mapping greppable, exportable, and
11
+ // checkable, which a comment block is not.
12
+ //
13
+ // Scope: the correspondence records what MEMO already means in AADL terms. It
14
+ // does not claim MEMO is AADL. Where AADL has no MEMO counterpart (subprogram,
15
+ // device, abstract) or MEMO has no AADL counterpart (every assurance
16
+ // discipline), there is simply no rule.
17
+ package memo_extension_aadl_correspondence {
18
+ private import ScalarValues::*;
19
+
20
+ private import memo_architecture_operational_context_stakeholders::*;
21
+
22
+ // ── Component categories ────────────────────────────────────────────
23
+ part aadlCorrProcess : CorrespondenceRule {
24
+ attribute :>> id = "EXT-AADL-C-001";
25
+ attribute :>> name = "ProcessCorrespondence";
26
+ attribute :>> ruleExpression = "memo_extension_aadl_runtime::AadlProcess <-> AADL component category `process`";
27
+ attribute :>> description = "A MEMO SoftwareComponent with runtimeKind = process, carrying addressSpaceIsolated.";
28
+ }
29
+ part aadlCorrThread : CorrespondenceRule {
30
+ attribute :>> id = "EXT-AADL-C-002";
31
+ attribute :>> name = "ThreadCorrespondence";
32
+ attribute :>> ruleExpression = "memo_extension_aadl_runtime::AadlThread <-> AADL component category `thread`";
33
+ attribute :>> description = "Schedulable unit inside one process; owningProcessName names the containing process.";
34
+ }
35
+ part aadlCorrVirtualProcessor : CorrespondenceRule {
36
+ attribute :>> id = "EXT-AADL-C-003";
37
+ attribute :>> name = "VirtualProcessorCorrespondence";
38
+ attribute :>> ruleExpression = "memo_extension_aadl_runtime::AadlVirtualProcessor <-> AADL component category `virtual processor`";
39
+ attribute :>> description = "An ARINC 653 partition. partitionBudget is the guaranteed time and memory; isolationMechanism is what enforces it.";
40
+ }
41
+ part aadlCorrProcessor : CorrespondenceRule {
42
+ attribute :>> id = "EXT-AADL-C-004";
43
+ attribute :>> name = "ProcessorCorrespondence";
44
+ attribute :>> ruleExpression = "memo_architecture_realization_physical::ProcessingNode <-> AADL component category `processor`";
45
+ }
46
+ part aadlCorrMemory : CorrespondenceRule {
47
+ attribute :>> id = "EXT-AADL-C-005";
48
+ attribute :>> name = "MemoryCorrespondence";
49
+ attribute :>> ruleExpression = "memo_architecture_realization_physical::MemoryDevice <-> AADL component category `memory`";
50
+ }
51
+ part aadlCorrBus : CorrespondenceRule {
52
+ attribute :>> id = "EXT-AADL-C-006";
53
+ attribute :>> name = "BusCorrespondence";
54
+ attribute :>> ruleExpression = "memo_architecture_implementation_hardware_electrical::NetworkMedium <-> AADL component category `bus`";
55
+ }
56
+ part aadlCorrSystem : CorrespondenceRule {
57
+ attribute :>> id = "EXT-AADL-C-007";
58
+ attribute :>> name = "SystemCorrespondence";
59
+ attribute :>> ruleExpression = "memo_architecture_logical_structure::System <-> AADL component category `system`";
60
+ attribute :>> description = "AADL's system is the composition unit, which is MEMO's logical System rather than any runtime element.";
61
+ }
62
+
63
+ // ── Bindings. AADL's analytic power is that everything is bound to
64
+ // something, and the binding is where latency, bandwidth, and fault
65
+ // propagation accrue. MEMO has all three (plan C1). ────────────────────
66
+ part aadlCorrProcessorBinding : CorrespondenceRule {
67
+ attribute :>> id = "EXT-AADL-C-010";
68
+ attribute :>> name = "ActualProcessorBindingCorrespondence";
69
+ attribute :>> ruleExpression = "memo_architecture_realization_deployment::DeploysTo <-> AADL property `Actual_Processor_Binding`";
70
+ }
71
+ part aadlCorrMemoryBinding : CorrespondenceRule {
72
+ attribute :>> id = "EXT-AADL-C-011";
73
+ attribute :>> name = "ActualMemoryBindingCorrespondence";
74
+ attribute :>> ruleExpression = "memo_architecture_realization_deployment::MemoryBinding <-> AADL property `Actual_Memory_Binding`";
75
+ }
76
+ part aadlCorrConnectionBinding : CorrespondenceRule {
77
+ attribute :>> id = "EXT-AADL-C-012";
78
+ attribute :>> name = "ActualConnectionBindingCorrespondence";
79
+ attribute :>> ruleExpression = "memo_architecture_realization_deployment::ConnectionBinding <-> AADL property `Actual_Connection_Binding`";
80
+ attribute :>> description = "The bound element is the ComponentExchange, because the exchange is what owns the budget the medium spends.";
81
+ }
82
+
83
+ // ── Ports and flows ─────────────────────────────────────────────────
84
+ part aadlCorrPortCategory : CorrespondenceRule {
85
+ attribute :>> id = "EXT-AADL-C-020";
86
+ attribute :>> name = "PortCategoryCorrespondence";
87
+ attribute :>> ruleExpression = "memo_core_enumerations::PortCategoryKind (data | 'event' | eventData) <-> AADL `data port` | `event port` | `event data port`";
88
+ attribute :>> description = "Determines whether a missed deadline loses a sample or grows a queue — two failure modes with two mitigations.";
89
+ }
90
+ part aadlCorrFlowSpec : CorrespondenceRule {
91
+ attribute :>> id = "EXT-AADL-C-021";
92
+ attribute :>> name = "FlowSpecificationCorrespondence";
93
+ attribute :>> ruleExpression = "memo_architecture_realization_deployment::FlowSpecification (FlowSpecKind source | sink | path) <-> AADL `flow source` | `flow sink` | `flow path`";
94
+ }
95
+ part aadlCorrEndToEndFlow : CorrespondenceRule {
96
+ attribute :>> id = "EXT-AADL-C-022";
97
+ attribute :>> name = "EndToEndFlowCorrespondence";
98
+ attribute :>> ruleExpression = "memo_architecture_realization_deployment::EndToEndFlow <-> AADL `end to end flow`";
99
+ }
100
+
101
+ // ── Properties. AADL's property sets are the technology-specific half of
102
+ // the language; these are the ones MEMO already carries by another name.
103
+ part aadlCorrPeriod : CorrespondenceRule {
104
+ attribute :>> id = "EXT-AADL-C-030";
105
+ attribute :>> name = "PeriodCorrespondence";
106
+ attribute :>> ruleExpression = "SoftwareComponent.periodMs <-> AADL `Timing_Properties::Period` (ms)";
107
+ }
108
+ part aadlCorrDeadline : CorrespondenceRule {
109
+ attribute :>> id = "EXT-AADL-C-031";
110
+ attribute :>> name = "DeadlineCorrespondence";
111
+ attribute :>> ruleExpression = "SoftwareComponent.deadlineMs <-> AADL `Timing_Properties::Deadline` (ms)";
112
+ }
113
+ part aadlCorrComputeExecutionTime : CorrespondenceRule {
114
+ attribute :>> id = "EXT-AADL-C-032";
115
+ attribute :>> name = "ComputeExecutionTimeCorrespondence";
116
+ attribute :>> ruleExpression = "SoftwareComponent.wcetMs <-> upper bound of AADL `Timing_Properties::Compute_Execution_Time` (ms)";
117
+ attribute :>> description = "AADL records a range; MEMO records the worst case, which is the bound a schedulability argument uses.";
118
+ }
119
+ part aadlCorrPriority : CorrespondenceRule {
120
+ attribute :>> id = "EXT-AADL-C-033";
121
+ attribute :>> name = "PriorityCorrespondence";
122
+ attribute :>> ruleExpression = "SoftwareComponent.priority <-> AADL `Thread_Properties::Priority`";
123
+ }
124
+ part aadlCorrSchedulingProtocol : CorrespondenceRule {
125
+ attribute :>> id = "EXT-AADL-C-034";
126
+ attribute :>> name = "SchedulingProtocolCorrespondence";
127
+ attribute :>> ruleExpression = "SoftwareComponent.schedulingPolicy <-> AADL `Deployment_Properties::Scheduling_Protocol`";
128
+ }
129
+ part aadlCorrLatency : CorrespondenceRule {
130
+ attribute :>> id = "EXT-AADL-C-035";
131
+ attribute :>> name = "LatencyCorrespondence";
132
+ attribute :>> ruleExpression = "EndToEndFlow.latencyBudgetMs <-> AADL `Communication_Properties::Latency` upper bound (ms)";
133
+ }
134
+ part aadlCorrBandwidth : CorrespondenceRule {
135
+ attribute :>> id = "EXT-AADL-C-036";
136
+ attribute :>> name = "BandwidthCorrespondence";
137
+ attribute :>> ruleExpression = "ConnectionBinding.allocatedBandwidth <-> AADL `Communication_Properties::Bandwidth_Budget`";
138
+ }
139
+
140
+ // ── Where the correspondence stops ──────────────────────────────────
141
+ part aadlCorrNoCounterpart : CorrespondenceRule {
142
+ attribute :>> id = "EXT-AADL-C-090";
143
+ attribute :>> name = "NoCounterpartNote";
144
+ attribute :>> ruleExpression = "no correspondence: AADL `subprogram`, `device`, `abstract`; MEMO's five assurance disciplines";
145
+ attribute :>> description = "Recorded so the gap is a stated boundary of the profile rather than an omission a reader has to discover.";
146
+ }
147
+ }
@@ -0,0 +1,17 @@
1
+ package memo_extension_aadl_methodology {
2
+ private import ScalarValues::*;
3
+ private import memo_methodology_core::*;
4
+ private import memo_methodology_profiles::*;
5
+ private import memo_core_enumerations::*;
6
+
7
+ part aadlExtensionMethod : MethodologyDefinition {
8
+ attribute :>> id = "EXT-AADL-001";
9
+ attribute :>> name = "AadlCorrespondenceExtension";
10
+ attribute :>> version = "0.7.0";
11
+ attribute :>> domain = "AADL (SAE AS5506) software runtime";
12
+ attribute :>> description = "Adds the AADL correspondence profile and the process / thread / virtual-processor runtime families.";
13
+ ref :>> baseMethodology = mdDefaultDefinition;
14
+ attribute :>> scopeMode = ScopeModeKind::explicit;
15
+ attribute :>> includedModule = "memo_extension_aadl";
16
+ }
17
+ }
@@ -0,0 +1,56 @@
1
+ // AADL (SAE AS5506) runtime component families.
2
+ //
3
+ // `SoftwareComponent.runtimeKind` says WHICH family a component belongs to and
4
+ // the base stops there, deliberately: the timing and assurance properties
5
+ // (period, deadline, WCET, scheduling policy, priority, health monitoring,
6
+ // restart policy, fault containment) are true of every runtime component in
7
+ // every regulated project, so they stay on the base.
8
+ //
9
+ // What the base used to carry as well was a set of attributes documented "set
10
+ // only for the relevant runtimeKind" — a subtype family in disguise, and one
11
+ // with a specific technology behind it. `addressSpaceIsolated` and
12
+ // `owningProcessName` are AADL's process/thread distinction; `partitionBudget`
13
+ // and `isolationMechanism` are AADL's virtual processor, which is what an
14
+ // ARINC 653 partition is modelled as. Each is unconditional on the type that
15
+ // owns it here, which is the whole point: an optional attribute that is only
16
+ // meaningful for one enum value cannot be checked, and a required attribute on
17
+ // a type can.
18
+ package memo_extension_aadl_runtime {
19
+ private import ScalarValues::*;
20
+
21
+ private import memo_core_enumerations::*;
22
+ private import memo_architecture_implementation_software_runtime::*;
23
+
24
+ // AADL `process`: a protected address space. Threads execute inside it;
25
+ // the process itself is the fault-containment and memory-protection
26
+ // boundary, which is why safety arguments quote it.
27
+ part def AadlProcess specializes SoftwareComponent {
28
+ attribute :>> runtimeKind = RuntimeKind::process;
29
+ // Whether the runtime enforces memory protection at this boundary.
30
+ // A process without address-space isolation is a scheduling unit, not
31
+ // a containment boundary, and no partitioning claim may rest on it.
32
+ attribute addressSpaceIsolated : Boolean;
33
+ }
34
+
35
+ // AADL `thread`: a schedulable unit of concurrency, always executing
36
+ // within exactly one process. The base's period / deadline / WCET /
37
+ // priority are AADL thread properties already; what was missing was the
38
+ // containing process.
39
+ part def AadlThread specializes SoftwareComponent {
40
+ attribute :>> runtimeKind = RuntimeKind::thread;
41
+ attribute owningProcessName : String;
42
+ }
43
+
44
+ // AADL `virtual processor`: a partition scheduled on a processor with a
45
+ // guaranteed budget. This is how an ARINC 653 partition is modelled, and
46
+ // the budget is what a temporal-partitioning argument is made of.
47
+ part def AadlVirtualProcessor specializes SoftwareComponent {
48
+ attribute :>> runtimeKind = RuntimeKind::partition;
49
+ // Time and memory guaranteed to the partition, e.g. "2 ms window per
50
+ // 10 ms major frame; 4 MB".
51
+ attribute partitionBudget : String;
52
+ // What enforces the partition — MMU, MPU, hypervisor, ARINC 653 module
53
+ // OS. A budget nothing enforces is a plan, not a control.
54
+ attribute isolationMechanism : String;
55
+ }
56
+ }
@@ -0,0 +1,18 @@
1
+ # Application/distribution descriptor for this MEMO package.
2
+ #
3
+ # Identity and location only. It records what this package is called, what
4
+ # version it is, and where its SysML source sits so a resolver can find it.
5
+ # It does not select model content: the project's native SysML imports and its
6
+ # ProjectMethodBinding decide what is in the model. Semantic fields
7
+ # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
+ # removed at the native semantic flip and are now rejected if present.
9
+ name: '@memoarchitect/extension-cloud'
10
+ version: 0.8.22
11
+ description: Networked services and managed data stores
12
+ license: MIT
13
+ tags:
14
+ - memo
15
+ - methodology
16
+ - extension
17
+ - cloud
18
+ sysmlDir: ./src
@@ -0,0 +1,44 @@
1
+ // Networked services and managed data stores — the runtime families a
2
+ // software-only medical device (SaMD) deploys onto infrastructure the
3
+ // manufacturer does not control.
4
+ //
5
+ // This is where `serviceContract`, `discoveryMechanism`, `storageKind`, and
6
+ // `retentionPolicy` live now. All four were optional attributes on
7
+ // `SoftwareComponent` documented "set only for the relevant runtimeKind";
8
+ // here each is unconditional on the type that owns it.
9
+ package memo_extension_cloud {
10
+ private import ScalarValues::*;
11
+
12
+ private import memo_core_enumerations::*;
13
+ private import memo_architecture_implementation_software_runtime::*;
14
+
15
+ // How a store keeps what it is given. A String said nothing a query could
16
+ // group by, and the retention argument in a records-retention assessment
17
+ // turns on which of these it is.
18
+ enum def CloudStorageKind {
19
+ enum relational;
20
+ enum document;
21
+ enum keyValue;
22
+ enum objectStore;
23
+ enum timeSeries;
24
+ enum blockVolume;
25
+ }
26
+
27
+ part def CloudService specializes SoftwareComponent {
28
+ attribute :>> runtimeKind = RuntimeKind::service;
29
+ // The externally visible contract: protocol, endpoint, request and
30
+ // response. This is the boundary a verification case exercises.
31
+ attribute serviceContract : String;
32
+ // How callers find it — DNS, service registry, mesh, static endpoint.
33
+ attribute discoveryMechanism : String;
34
+ }
35
+
36
+ part def CloudDataStore specializes SoftwareComponent {
37
+ attribute :>> runtimeKind = RuntimeKind::dataStore;
38
+ attribute storageKind : CloudStorageKind;
39
+ // How long records are kept and what ends them. Regulated content:
40
+ // a device record has a retention obligation, and the store is where
41
+ // that obligation is either met or not.
42
+ attribute retentionPolicy : String;
43
+ }
44
+ }
@@ -0,0 +1,17 @@
1
+ package memo_extension_cloud_methodology {
2
+ private import ScalarValues::*;
3
+ private import memo_methodology_core::*;
4
+ private import memo_methodology_profiles::*;
5
+ private import memo_core_enumerations::*;
6
+
7
+ part cloudExtensionMethod : MethodologyDefinition {
8
+ attribute :>> id = "EXT-CLOUD-001";
9
+ attribute :>> name = "CloudRuntimeExtension";
10
+ attribute :>> version = "0.7.0";
11
+ attribute :>> domain = "networked services and managed data stores";
12
+ attribute :>> description = "Adds service and data-store runtime families with their contracts, discovery, and retention.";
13
+ ref :>> baseMethodology = mdDefaultDefinition;
14
+ attribute :>> scopeMode = ScopeModeKind::explicit;
15
+ attribute :>> includedModule = "memo_extension_cloud";
16
+ }
17
+ }
@@ -0,0 +1,18 @@
1
+ # Application/distribution descriptor for this MEMO package.
2
+ #
3
+ # Identity and location only. It records what this package is called, what
4
+ # version it is, and where its SysML source sits so a resolver can find it.
5
+ # It does not select model content: the project's native SysML imports and its
6
+ # ProjectMethodBinding decide what is in the model. Semantic fields
7
+ # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
+ # removed at the native semantic flip and are now rejected if present.
9
+ name: '@memoarchitect/extension-container'
10
+ version: 0.8.22
11
+ description: OCI container images and container runtimes as deployment content
12
+ license: MIT
13
+ tags:
14
+ - memo
15
+ - methodology
16
+ - extension
17
+ - container
18
+ sysmlDir: ./src
@@ -0,0 +1,37 @@
1
+ // Containerized deployment (OCI). Technology-neutral across orchestrators, so
2
+ // a project that containerizes anything can include this module on its own;
3
+ // `memo_extension_ros` specializes both types rather than restating them.
4
+ //
5
+ // This is where `imageReference` and `orchestrationPlatform` live now. They
6
+ // were optional attributes on `SoftwareComponent` documented "set only when
7
+ // runtimeKind = container" — a subtype family in disguise, and a technology
8
+ // choice the base ontology had no business asserting. On the types below they
9
+ // are unconditional, which is what makes them checkable.
10
+ package memo_extension_container {
11
+ private import ScalarValues::*;
12
+
13
+ private import memo_architecture_realization_deployment::*;
14
+
15
+ // The built artifact. `BuildsInto` (SoftwareModule -> DeploymentUnit)
16
+ // reaches it unchanged, which is the test that the base is factored
17
+ // correctly: a whole packaging technology lands without touching a base
18
+ // relation.
19
+ part def ContainerImage specializes DeploymentUnit {
20
+ // The pullable reference, e.g. "registry.example.com/screening:1.4.0".
21
+ attribute imageReference : String;
22
+ attribute registry : String;
23
+ // The content digest. A tag can be re-pointed; a digest is what a
24
+ // design history file can argue reproducibility from.
25
+ attribute digest : String;
26
+ attribute baseImage : String;
27
+ }
28
+
29
+ // The environment a node provides. `ProvidesEnvironment` (ProcessingNode
30
+ // -> RuntimeEnvironment) reaches it unchanged.
31
+ part def ContainerRuntime specializes RuntimeEnvironment {
32
+ // Kubernetes, Nomad, Docker Compose, systemd-nspawn, none.
33
+ attribute orchestrationPlatform : String;
34
+ // The engine below the orchestrator — containerd, CRI-O, Docker.
35
+ attribute runtimeEngine : String;
36
+ }
37
+ }
@@ -0,0 +1,17 @@
1
+ package memo_extension_container_methodology {
2
+ private import ScalarValues::*;
3
+ private import memo_methodology_core::*;
4
+ private import memo_methodology_profiles::*;
5
+ private import memo_core_enumerations::*;
6
+
7
+ part containerExtensionMethod : MethodologyDefinition {
8
+ attribute :>> id = "EXT-CONTAINER-001";
9
+ attribute :>> name = "ContainerDeploymentExtension";
10
+ attribute :>> version = "0.7.0";
11
+ attribute :>> domain = "containerized deployment";
12
+ attribute :>> description = "Adds OCI container images and container runtimes as deployment content.";
13
+ ref :>> baseMethodology = mdDefaultDefinition;
14
+ attribute :>> scopeMode = ScopeModeKind::explicit;
15
+ attribute :>> includedModule = "memo_extension_container";
16
+ }
17
+ }
@@ -0,0 +1,18 @@
1
+ # Application/distribution descriptor for this MEMO package.
2
+ #
3
+ # Identity and location only. It records what this package is called, what
4
+ # version it is, and where its SysML source sits so a resolver can find it.
5
+ # It does not select model content: the project's native SysML imports and its
6
+ # ProjectMethodBinding decide what is in the model. Semantic fields
7
+ # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
+ # removed at the native semantic flip and are now rejected if present.
9
+ name: '@memoarchitect/extension-messaging'
10
+ version: 0.8.22
11
+ description: Publish/subscribe messaging — topics, brokers, and delivery semantics
12
+ license: MIT
13
+ tags:
14
+ - memo
15
+ - methodology
16
+ - extension
17
+ - messaging
18
+ sysmlDir: ./src
@@ -0,0 +1,64 @@
1
+ // Messaging vocabulary, technology-neutral across DDS, MQTT, AMQP and Kafka.
2
+ // It specializes native item, port, and interface families; publication and
3
+ // subscription are expressed by port direction plus native flows/messages.
4
+ //
5
+ // This is where `deliverySemantics` and `topicStructure` live now, and moving
6
+ // them fixed a metaclass error as well as a layering one. Both were attributes
7
+ // on `SoftwareComponent`, and neither is a property of a component: a
8
+ // component does not have a topic, a publication does; a component does not
9
+ // have delivery semantics, the channel it publishes over does.
10
+ package memo_extension_messaging {
11
+ private import ScalarValues::*;
12
+
13
+ private import memo_core_common::*;
14
+ private import memo_core_enumerations::*;
15
+ private import memo_architecture_logical_interfaces::*;
16
+ private import memo_architecture_implementation_software_structure::*;
17
+ private import memo_architecture_implementation_software_runtime::*;
18
+
19
+ // What a broker guarantees about each message. Safety-relevant: an alarm
20
+ // published at-most-once can be silently dropped, and an at-least-once
21
+ // command can be applied twice.
22
+ enum def MessagingDeliveryKind {
23
+ enum atMostOnce;
24
+ enum atLeastOnce;
25
+ enum exactlyOnce;
26
+ }
27
+
28
+ // Message/payload definition. A named topic is an item usage of a concrete
29
+ // message definition; the definition states the schema, while the usage
30
+ // supplies the deployed topic identity.
31
+ item def MessagingMessage specializes SoftwareItem {
32
+ attribute messageSchema : String;
33
+ }
34
+
35
+ // Endpoint roles. Direction is native on both the port's payload feature
36
+ // and the port usage placed on a component. The shared `topic` reference
37
+ // points every endpoint at the same named item usage.
38
+ port def MessagingPublisher specializes SoftwarePort {
39
+ out item payload : MessagingMessage;
40
+ ref item topic : MessagingMessage;
41
+ attribute deliverySemantics : MessagingDeliveryKind;
42
+ attribute publishRateHz : Real;
43
+ }
44
+
45
+ port def MessagingSubscriber specializes SoftwarePort {
46
+ in item payload : MessagingMessage;
47
+ ref item topic : MessagingMessage;
48
+ attribute deliverySemantics : MessagingDeliveryKind;
49
+ attribute lossBehaviour : String;
50
+ }
51
+
52
+ interface def MessagingTopicInterface specializes SoftwareInterface {
53
+ end publisher : MessagingPublisher :>> source;
54
+ end subscriber : MessagingSubscriber :>> target;
55
+ flow of MessagingMessage from publisher.payload to subscriber.payload;
56
+ }
57
+
58
+ part def MessagingBroker specializes SoftwareComponent {
59
+ attribute :>> runtimeKind = RuntimeKind::messageBroker;
60
+ attribute brokerProduct : String;
61
+ attribute persistenceEnabled : Boolean;
62
+ }
63
+
64
+ }
@@ -0,0 +1,17 @@
1
+ package memo_extension_messaging_methodology {
2
+ private import ScalarValues::*;
3
+ private import memo_methodology_core::*;
4
+ private import memo_methodology_profiles::*;
5
+ private import memo_core_enumerations::*;
6
+
7
+ part messagingExtensionMethod : MethodologyDefinition {
8
+ attribute :>> id = "EXT-MESSAGING-001";
9
+ attribute :>> name = "MessagingExtension";
10
+ attribute :>> version = "0.7.0";
11
+ attribute :>> domain = "publish/subscribe messaging";
12
+ attribute :>> description = "Adds message items, publisher/subscriber ports, topic interfaces, brokers, and delivery semantics.";
13
+ ref :>> baseMethodology = mdDefaultDefinition;
14
+ attribute :>> scopeMode = ScopeModeKind::explicit;
15
+ attribute :>> includedModule = "memo_extension_messaging";
16
+ }
17
+ }
@@ -0,0 +1,18 @@
1
+ # Application/distribution descriptor for this MEMO package.
2
+ #
3
+ # Identity and location only. It records what this package is called, what
4
+ # version it is, and where its SysML source sits so a resolver can find it.
5
+ # It does not select model content: the project's native SysML imports and its
6
+ # ProjectMethodBinding decide what is in the model. Semantic fields
7
+ # (`type`, `extends`, `usage`, `ontologies`, `methodology`, `modules`) were
8
+ # removed at the native semantic flip and are now rejected if present.
9
+ name: '@memoarchitect/extension-ros'
10
+ version: 0.8.22
11
+ description: ROS 2 nodes, messages, topic/service/action interfaces, QoS, and containerized deployment
12
+ license: MIT
13
+ tags:
14
+ - memo
15
+ - methodology
16
+ - extension
17
+ - ros
18
+ sysmlDir: ./src
@@ -0,0 +1,25 @@
1
+ package memo_extension_ros_methodology {
2
+ private import ScalarValues::*;
3
+ private import memo_methodology_core::*;
4
+ private import memo_methodology_profiles::*;
5
+ private import memo_core_enumerations::*;
6
+
7
+ // An extension that builds on other extensions names them all here.
8
+ // `baseMethodology` is [0..1] — single inheritance, deliberate — but
9
+ // `includedModule` is [0..*], so this is how a dependency between
10
+ // extensions is expressed. There is no chaining and no second base.
11
+ part rosExtensionMethod : MethodologyDefinition {
12
+ attribute :>> id = "EXT-ROS-001";
13
+ attribute :>> name = "Ros2Extension";
14
+ attribute :>> version = "0.7.0";
15
+ attribute :>> domain = "ROS 2 robotics middleware";
16
+ attribute :>> description = "Adds ROS 2 nodes, messages, directional ports, topic/service/action interfaces, QoS, and containerized deployment.";
17
+ ref :>> baseMethodology = mdDefaultDefinition;
18
+ attribute :>> scopeMode = ScopeModeKind::explicit;
19
+ attribute :>> includedModule = (
20
+ "memo_extension_messaging",
21
+ "memo_extension_container",
22
+ "memo_extension_ros"
23
+ );
24
+ }
25
+ }