@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
@@ -1,6 +1,9 @@
1
1
  package memo_core_relationships {
2
+ private import Metaobjects::SemanticMetadata;
2
3
  private import ScalarValues::*;
3
4
 
5
+ private import Connections::BinaryConnection;
6
+
4
7
  private import memo_core_common::*;
5
8
  private import memo_core_enumerations::*;
6
9
 
@@ -8,13 +11,52 @@ package memo_core_relationships {
8
11
  // Connection/Association), specializing the MemoRelationship base. The
9
12
  // relationship name is the verb; the RelationshipRegistry derives the
10
13
  // navigable type as camelCase(name) and navigation is bidirectional.
11
- // Structural properties of a relation, declared here so authoring and
12
- // validation read them from the ontology instead of assuming them. Both are
13
- // unset on the base and carry the conservative reading: a relation forbids
14
- // self-links and forbids repeats unless it says otherwise. A subtype opts
15
- // out by redefining, e.g. `attribute :>> isReflexive = true;`.
16
- abstract connection def MemoRelationship {
17
- attribute linkStatus : LinkStatusKind;
14
+ //
15
+ // MemoRelationship roots on the SysML v2 standard library's
16
+ // Connections::BinaryConnection rather than floating free. Every two-ended
17
+ // `connection def` implicitly specializes it anyway; saying so explicitly
18
+ // is what lets MEMO relations be read as ordinary SysML connections by any
19
+ // conforming tool instead of as a MEMO-private construct.
20
+ //
21
+ // A relation is a MEMO element like any other, so it carries the same
22
+ // identification core as the part/action/item/requirement bases in
23
+ // memo_core_common — with four exceptions, R10-S5 (2026-08-13). `name`,
24
+ // `description`, `rationale` and `status` were declared here too, and a
25
+ // tree measurement found them dead weight: across every connection usage
26
+ // in src/ and examples/ (876 of them, 77 with a body at all), exactly one
27
+ // ever set `rationale` and none ever set `name`, `description` or
28
+ // `status`. The former `linkStatus` (planned/active/verified/obsolete) is
29
+ // already gone for the same reason: a link being "verified" was never an
30
+ // editorial state.
31
+ //
32
+ // The replacement is native, not a MEMO-authored substitute:
33
+ // - `name` → the connection usage's own declared name
34
+ // (`connection linkFoo : Bar …`), which every usage already has.
35
+ // - `description` → `doc /* … */` on the usage.
36
+ // - `rationale` → standard `Rationale` metadata: `@Rationale { :>> text
37
+ // = "…"; }` (ModelingMetadata.sysml:95). `text` is exported into
38
+ // `rel.attributes.rationale` by the builder, same key as before.
39
+ // - `status` → standard `StatusInfo` metadata: `@StatusInfo { :>>
40
+ // status = StatusKind::…; }` (ModelingMetadata.sysml:60). StatusKind
41
+ // (open/tbd/tbr/tbc/done/closed) is NOT ElementStatusKind
42
+ // (proposed/draft/inReview/approved/released/deprecated/retired) — the
43
+ // mapping between them, and why no MEMO-side conversion code exists, is
44
+ // recorded in docs/reference/naming-and-native-constructs.md. Exported
45
+ // into `rel.attributes.status`.
46
+ // Both metadata defs live in the standard `ModelingMetadata` package;
47
+ // `private import ModelingMetadata::*;` wherever they are applied.
48
+ //
49
+ // isReflexive/isUnique are structural properties of the relation itself,
50
+ // declared here so authoring and validation read them from the ontology
51
+ // instead of assuming them. Both are unset on the base and carry the
52
+ // conservative reading: a relation forbids self-links and forbids repeats
53
+ // unless it says otherwise. A subtype opts out by redefining, e.g.
54
+ // `attribute :>> isReflexive = true;`.
55
+ abstract connection def MemoRelationship :> Connections::BinaryConnection {
56
+ attribute id : String;
57
+ attribute uuid : String;
58
+ attribute shortDescription : String;
59
+ attribute sourceReference : String;
18
60
  doc /* True when an element may be related to itself by this relation.
19
61
  * Unset is read as false. */
20
62
  attribute isReflexive : Boolean;
@@ -24,211 +66,170 @@ package memo_core_relationships {
24
66
  attribute isUnique : Boolean;
25
67
  }
26
68
 
69
+ // ─── Metaclass-neutral ends (Track A0) ──────────────────────────────
70
+ //
71
+ // An end is left UNTYPED (`:>> source` / `:>> target`) wherever its
72
+ // legitimate endpoints do not share a MEMO base, and a rule in
73
+ // memo_rules_ontology states the constraint the type used to state.
74
+ //
75
+ // The reason is structural, not stylistic. KerML will not let a port or a
76
+ // behaviour specialize a part-based type, so a `MemoPart`-typed end forces
77
+ // everything it accepts to be a part. That is what made PhysicalPort and
78
+ // SoftwarePort part defs (so they could terminate exchanges), what made
79
+ // SystemFunction a part def with its behaviour stapled on through a
80
+ // separate action def, and what makes `allocate <function> to <actor>` —
81
+ // ARCADIA's own System Analysis mechanism — illegal, since Actor is a
82
+ // MemoPart but not an ArchitectureElement.
83
+ //
84
+ // Several of the relaxed ends were ALREADY being violated by real content
85
+ // before they were relaxed: `composes` links parts to WorkflowStep and
86
+ // OperationalActivity (action defs) and to SoftwarePort/PhysicalPort;
87
+ // `precedes` links OperationalActivity to OperationalActivity; `allocatedTo`
88
+ // has ActionUsage sources; `bindsToInterface` targets an `interface def`,
89
+ // which an InterfaceElement-typed end cannot hold. The types were not
90
+ // buying the strictness they appeared to buy.
91
+ //
92
+ // What is NOT relaxed stays typed on purpose: `verificationCase` and
93
+ // `validationCase` are verification defs, `performed` and `enabled` are
94
+ // MemoActions, `targetRequirement` is a MemoRequirementElement. Those ends
95
+ // name one metaclass and mean it.
96
+ //
97
+ // The strictness did not evaporate — see CR-ONT-060..CR-ONT-071 in
98
+ // src/rules/ontology/ontology_invariants.sysml. Relaxing the ends without
99
+ // those rules would have been a silent loss of every constraint the ends
100
+ // were carrying.
101
+ //
27
102
  // The general relation that can join any two model elements, whatever
28
- // their metaclass. Most specific relations type their ends against a
29
- // foundation (MemoPart, VerifiableElement, …). A small number of specific
30
- // cross-metaclass relations leave an end untyped because their accepted
31
- // constructs have no shared MEMO base; their names and attributes still
32
- // carry a precise engineering meaning. MemoLink leaves both ends untyped
33
- // and adds no domain-specific semantics, which is what makes it universal.
103
+ // their metaclass. MemoLink leaves both ends untyped and adds no
104
+ // domain-specific semantics, which is what makes it universal.
34
105
  //
35
106
  // It is deliberately the weakest relation in the ontology. Reach for it
36
- // only when no specific relation carries the meaning, and say why in
37
- // linkRationale — an untyped link with no stated reason is an audit gap,
38
- // not a model fact.
107
+ // only when no specific relation carries the meaning, and say why in the
108
+ // inherited `rationale` — an untyped link with no stated reason is an
109
+ // audit gap, not a model fact.
39
110
  connection def MemoLink :> MemoRelationship {
40
111
  doc /* Generic association between any two model elements. */
41
- attribute linkRationale : String;
42
- end linkSource;
43
- end linkTarget;
112
+ end linkSource :>> source;
113
+ end linkTarget :>> target;
114
+ }
115
+ abstract connection memoLinkLinks : MemoLink[*];
116
+ metadata def <memoLink> MemoLinkMetadata :> SemanticMetadata {
117
+ :> annotatedElement : SysML::ConnectionDefinition;
118
+ :> annotatedElement : SysML::ConnectionUsage;
119
+ :>> baseType = memoLinkLinks meta SysML::Usage;
44
120
  }
45
121
 
46
122
  connection def DerivesFrom :> MemoRelationship {
47
- // Drivers include needs and hazards (ISO 14971: hazards drive
48
- // requirements). targetRequirement is untyped: Need is a requirement def
49
- // (MemoNeed + RequirementDriver) and does not conform to VerifiableElement
50
- // under SysIDE related-feature-conformance.
51
- end sourceDriver : MemoPart;
52
- end targetRequirement;
53
- }
54
- connection def SatisfiedBy :> MemoRelationship {
55
- // Untyped: Need (requirement) instances must participate alongside Requirement.
56
- end requiredElement;
57
- end satisfyingElement : ArchitectureElement;
58
- }
59
- // Mitigates unifies the control/action → risk-element edges of the
60
- // ISO 14971 / FMEA / FTA / cyber chains — MitigatesHazard,
61
- // MitigatesVulnerability, MitigatedByControl, BrokenByControl,
62
- // AddressedByAction — keyed by mitigationKind. control is the mitigating
63
- // control/action; mitigatedElement is the hazard/vulnerability/failure/cut set.
64
- enum def MitigationKind {
65
- enum hazard;
66
- enum vulnerability;
67
- enum failureMode;
68
- enum cutSet;
69
- enum fmeaAction;
70
- }
71
- connection def Mitigates :> MemoRelationship {
72
- attribute mitigationKind : MitigationKind;
73
- // Untyped: controls/hazards may be item defs (RiskControlMeasure, Hazard, …).
74
- end control;
75
- end mitigatedElement;
76
- }
77
- connection def AllocatedTo :> MemoRelationship {
78
- end function : ArchitectureElement;
79
- end allocatedElement : ArchitectureElement;
80
- }
81
- // Realizes is the single realization relation (realizing/concrete element →
82
- // realized/abstract element). It unifies RealizesInterface,
83
- // RealizesComponentExchange, RealizedByArchitecture, RealizesScenario,
84
- // ModuleRealizesLogical, ComponentRealizesModule, PhysicalModuleRealizesLogical,
123
+ // Drivers span metaclasses — a need is a requirement def, a hazard an
124
+ // item, a threat an item — so the source end stays untyped. The target
125
+ // is now typed: since Requirement re-rooted onto MemoRequirement, one
126
+ // type name covers the whole requirement family.
127
+ end sourceDriver :>> source;
128
+ end targetRequirement : MemoRequirementElement :>> target;
129
+ }
130
+ abstract connection derivesFromLinks : DerivesFrom[*];
131
+ metadata def <derivesFrom> DerivesFromMetadata :> SemanticMetadata {
132
+ :> annotatedElement : SysML::ConnectionDefinition;
133
+ :> annotatedElement : SysML::ConnectionUsage;
134
+ :>> baseType = derivesFromLinks meta SysML::Usage;
135
+ }
136
+ // `Realizes` (realizing/concrete element → realized/abstract element) is
137
+ // native `#refinement dependency` (R10-S6): write
138
+ // `#refinement dependency <realizing> to <realized>;` instead. It used to
139
+ // unify RealizesInterface, RealizesComponentExchange,
140
+ // RealizedByArchitecture, RealizesScenario, ModuleRealizesLogical,
141
+ // ComponentRealizesModule, PhysicalModuleRealizesLogical,
85
142
  // Implements{Component,Procedure}, UIRealizesFunctional,
86
- // FunctionalRealizesOper{ative,ational} and ScenarioRealizesUseCase.
87
- connection def Realizes :> MemoRelationship {
88
- // Realization crosses structural and behavioral metaclasses (for
89
- // example a FunctionalFlow route realizing a FunctionalScenario).
90
- end realizing;
91
- end realized;
92
- }
93
- connection def VerifiedBy :> MemoRelationship {
94
- // Requirements, risk controls, and architecture components are
95
- // all legitimate verification targets
96
- end verificationTarget : MemoPart;
97
- end verificationCase : MemoVerificationCase;
98
- }
143
+ // FunctionalRealizesOper{ative,ational} and ScenarioRealizesUseCase; the
144
+ // native form keeps that reach, since `#refinement` places no metaclass
145
+ // restriction on either end.
99
146
  connection def ProducesEvidence :> MemoRelationship {
100
- end producer : MemoVerificationCase;
101
- end producedEvidence : MemoEvidence;
102
- }
103
- connection def IncludedIn :> MemoRelationship {
104
- end sourceElement : MemoPart;
105
- end targetView : MemoPart;
106
- }
107
- connection def Precedes :> MemoRelationship {
108
- attribute sameStepRequired : Boolean;
109
- attribute precedenceRationale : String;
110
- end predecessor : ArchitectureElement;
111
- end successor : ArchitectureElement;
112
- }
113
- connection def ResolvesToMethodology :> MemoRelationship {
114
- end boundModelElement : MemoPart;
115
- end resolvedMethodology : MemoPart;
116
- }
117
-
118
- // ISO 14971 risk chain — distinct sequence-of-events relations over risk elements.
119
- connection def TracesRisk :> MemoRelationship {
120
- end sourceRiskElement : MemoPart;
121
- end targetRiskElement : MemoPart;
122
- }
123
- connection def AssessedAgainst :> MemoRelationship {
124
- end risk : MemoPart;
125
- end riskMatrix : MemoPart;
126
- }
147
+ end producer : MemoVerificationCase :>> source;
148
+ end producedEvidence : MemoEvidence :>> target;
149
+ }
150
+ abstract connection producesEvidenceLinks : ProducesEvidence[*];
151
+ metadata def <producesEvidence> ProducesEvidenceMetadata :> SemanticMetadata {
152
+ :> annotatedElement : SysML::ConnectionDefinition;
153
+ :> annotatedElement : SysML::ConnectionUsage;
154
+ :>> baseType = producesEvidenceLinks meta SysML::Usage;
155
+ }
156
+ // `Precedes` is native `succession` (`first a then b;`), R10-S6.
157
+ // `sameStepRequired`/`precedenceRationale` had zero usages anywhere in
158
+ // the tree (same free-deletion shape R10-S5 found for `rationale`), so
159
+ // there was no content to carry forward.
127
160
 
128
161
  connection def ThreatenedBy :> MemoRelationship {
129
162
  attribute threatRole : String;
130
- end protectedAsset : ArchitectureElement;
131
- end realizedThreat : RequirementDriver;
163
+ end protectedAsset : ArchitectureElement :>> source;
164
+ end realizedThreat : RequirementDriver :>> target;
132
165
  }
133
- connection def Exploits :> MemoRelationship {
134
- end realizedThreat : RequirementDriver;
135
- end enablingVulnerability : MemoPart;
136
- }
137
- connection def RealizedByScenario :> MemoRelationship {
138
- end realizedThreat : RequirementDriver;
139
- end scenario : MemoPart;
166
+ abstract connection threatenedByLinks : ThreatenedBy[*];
167
+ metadata def <threatenedBy> ThreatenedByMetadata :> SemanticMetadata {
168
+ :> annotatedElement : SysML::ConnectionDefinition;
169
+ :> annotatedElement : SysML::ConnectionUsage;
170
+ :>> baseType = threatenedByLinks meta SysML::Usage;
140
171
  }
141
172
  connection def DerivesCyberRequirement :> MemoRelationship {
142
- end sourceThreatOrRisk : RequirementDriver;
143
- end targetRequirement : VerifiableElement;
173
+ end sourceThreatOrRisk : RequirementDriver :>> source;
174
+ end targetRequirement : MemoRequirementElement :>> target;
144
175
  }
145
- connection def ImpactsSafety :> MemoRelationship {
146
- attribute tracePurpose : String;
147
- end cyberElement : MemoPart;
148
- end safetyElement : MemoPart;
176
+ abstract connection derivesCyberRequirementLinks : DerivesCyberRequirement[*];
177
+ metadata def <derivesCyberRequirement> DerivesCyberRequirementMetadata :> SemanticMetadata {
178
+ :> annotatedElement : SysML::ConnectionDefinition;
179
+ :> annotatedElement : SysML::ConnectionUsage;
180
+ :>> baseType = derivesCyberRequirementLinks meta SysML::Usage;
149
181
  }
150
182
  connection def CrossesTrustBoundary :> MemoRelationship {
151
183
  attribute crossingKind : InterfaceKind;
152
- end boundary : InterfaceElement;
153
- end crossingItem : MemoPart;
184
+ end boundary :>> source;
185
+ end crossingItem :>> target;
186
+ }
187
+ abstract connection crossesTrustBoundaryLinks : CrossesTrustBoundary[*];
188
+ metadata def <crossesTrustBoundary> CrossesTrustBoundaryMetadata :> SemanticMetadata {
189
+ :> annotatedElement : SysML::ConnectionDefinition;
190
+ :> annotatedElement : SysML::ConnectionUsage;
191
+ :>> baseType = crossesTrustBoundaryLinks meta SysML::Usage;
154
192
  }
155
193
 
156
194
  connection def Validates :> MemoRelationship {
157
195
  // Validation targets include use cases and other behavioural elements,
158
196
  // so the target remains untyped across SysML metaclass families.
159
- end validationTarget;
160
- end validationCase : MemoVerificationCase;
161
- }
162
- connection def DependsOnSoup :> MemoRelationship {
163
- end component : ArchitectureElement;
164
- end soupItem : MemoPart;
197
+ end validationTarget :>> source;
198
+ end validationCase : MemoVerificationCase :>> target;
165
199
  }
166
-
167
- // Performs unifies the former Performs / PerformsActivity / PerformsFunction
168
- // synonyms. The performer (operational entity, actor, or system action) and
169
- // the performed element (activity or function) are distinguished by the end
170
- // instance types, so generic MemoPart ends keep this in core without a
171
- // dependency on architecture-layer types.
172
- connection def Performs :> MemoRelationship {
173
- end performer : MemoPart;
174
- end performed : MemoPart;
200
+ abstract connection validatesLinks : Validates[*];
201
+ metadata def <validates> ValidatesMetadata :> SemanticMetadata {
202
+ :> annotatedElement : SysML::ConnectionDefinition;
203
+ :> annotatedElement : SysML::ConnectionUsage;
204
+ :>> baseType = validatesLinks meta SysML::Usage;
175
205
  }
176
206
 
177
207
  // Enables unifies the former EnablesWorkflow / EnablesActivity synonyms
178
208
  // (an enabling system/function enables a workflow/activity).
179
209
  connection def Enables :> MemoRelationship {
180
- end enabling : MemoPart;
181
- end enabled : MemoPart;
210
+ end enabling :>> source;
211
+ end enabled : MemoAction :>> target;
182
212
  }
183
-
184
- connection def HostedBy :> MemoRelationship {
185
- end processingNode : ArchitectureElement;
186
- end hostAssembly : ArchitectureElement;
213
+ abstract connection enablesLinks : Enables[*];
214
+ metadata def <enables> EnablesMetadata :> SemanticMetadata {
215
+ :> annotatedElement : SysML::ConnectionDefinition;
216
+ :> annotatedElement : SysML::ConnectionUsage;
217
+ :>> baseType = enablesLinks meta SysML::Usage;
187
218
  }
188
219
 
189
- connection def HasFailureMode :> MemoRelationship {
190
- end element : ArchitectureElement;
191
- end failureMode : MemoPart;
192
- }
193
- // Causes unifies the former causal edges of the ISO 14971 / FMEA / FTA
194
- // chains — CausesEffect, CausedBy, ContributesToHazard, LeadsToHazard,
195
- // OriginatesFrom, UseErrorLeadsToHazard — keyed by causeKind. cause is the
196
- // originating element, effect the consequence.
197
- enum def CauseKind {
198
- enum failureCausesEffect;
199
- enum failureCausedBy;
200
- enum contributesToHazard;
201
- enum leadsToHazard;
202
- enum originatesFrom;
203
- enum useErrorLeadsToHazard;
204
- }
205
- connection def Causes :> MemoRelationship {
206
- attribute causeKind : CauseKind;
207
- end cause : MemoPart;
208
- end effect : MemoPart;
220
+ connection def HostedBy :> MemoRelationship {
221
+ end processingNode : ArchitectureElement :>> source;
222
+ end hostAssembly : ArchitectureElement :>> target;
209
223
  }
210
- connection def DetectedBy :> MemoRelationship {
211
- end failureMode : MemoPart;
212
- end detectionMethod : MemoPart;
224
+ abstract connection hostedByLinks : HostedBy[*];
225
+ metadata def <hostedBy> HostedByMetadata :> SemanticMetadata {
226
+ :> annotatedElement : SysML::ConnectionDefinition;
227
+ :> annotatedElement : SysML::ConnectionUsage;
228
+ :>> baseType = hostedByLinks meta SysML::Usage;
213
229
  }
214
230
 
215
- connection def InputToGate :> MemoRelationship {
216
- end input : MemoPart;
217
- end gate : MemoPart;
218
- }
219
- connection def ProducesEvent :> MemoRelationship {
220
- end gate : MemoPart;
221
- end eventElement : MemoPart;
222
- }
223
- connection def ContainsEvent :> MemoRelationship {
224
- end cutSet : MemoPart;
225
- end eventElement : MemoPart;
226
- }
227
231
 
228
- connection def Decides :> MemoRelationship {
229
- end decision : MemoPart;
230
- end affectedElement : MemoPart;
231
- }
232
+
232
233
 
233
234
  // Composes is the single whole/part decomposition relation. It unifies the
234
235
  // former ComposesLogical / AssemblyComprises / Contains{Component,Element} /
@@ -236,33 +237,35 @@ package memo_core_relationships {
236
237
  // Collection membership is carried by the end instance.
237
238
  // types, so the ends are generic MemoPart.
238
239
  connection def Composes :> MemoRelationship {
239
- end parent : MemoPart;
240
- end child : MemoPart;
240
+ end parent :>> source;
241
+ end child :>> target;
241
242
  }
242
-
243
- connection def IdentifiesHazard :> MemoRelationship {
244
- end deviation : MemoPart;
245
- end hazard : MemoPart;
246
- }
247
- connection def AnalyzedBy :> MemoRelationship {
248
- end element : ArchitectureElement;
249
- end analysisArtifact : AnalysisArtifact;
243
+ abstract connection composesLinks : Composes[*];
244
+ metadata def <composes> ComposesMetadata :> SemanticMetadata {
245
+ :> annotatedElement : SysML::ConnectionDefinition;
246
+ :> annotatedElement : SysML::ConnectionUsage;
247
+ :>> baseType = composesLinks meta SysML::Usage;
250
248
  }
251
249
 
252
- connection def Changes :> MemoRelationship {
253
- end changeRequest : MemoPart;
254
- end changedElement : MemoPart;
255
- }
256
- connection def TestedByUsability :> MemoRelationship {
257
- end uiElementOrTask : MemoPart;
258
- end usabilityTest : VerifiableElement;
250
+ connection def AnalyzedBy :> MemoRelationship {
251
+ end element : ArchitectureElement :>> source;
252
+ end analysisArtifact : AnalysisArtifact :>> target;
259
253
  }
260
- connection def FeedsBackTo :> MemoRelationship {
261
- end feedbackItem : MemoPart;
262
- end designElement : MemoPart;
254
+ abstract connection analyzedByLinks : AnalyzedBy[*];
255
+ metadata def <analyzedBy> AnalyzedByMetadata :> SemanticMetadata {
256
+ :> annotatedElement : SysML::ConnectionDefinition;
257
+ :> annotatedElement : SysML::ConnectionUsage;
258
+ :>> baseType = analyzedByLinks meta SysML::Usage;
263
259
  }
260
+
264
261
  connection def BindsToInterface :> MemoRelationship {
265
- end portElement : InterfaceElement;
266
- end boundInterface : InterfaceElement;
262
+ end portElement :>> source;
263
+ end boundInterface :>> target;
264
+ }
265
+ abstract connection bindsToInterfaceLinks : BindsToInterface[*];
266
+ metadata def <bindsToInterface> BindsToInterfaceMetadata :> SemanticMetadata {
267
+ :> annotatedElement : SysML::ConnectionDefinition;
268
+ :> annotatedElement : SysML::ConnectionUsage;
269
+ :>> baseType = bindsToInterfaceLinks meta SysML::Usage;
267
270
  }
268
271
  }
@@ -74,6 +74,18 @@ package memo {
74
74
  public import memo_artifacts_core::*;
75
75
  public import memo_artifacts_configuration_management::*;
76
76
  public import memo_artifacts_documents_risk_management::*;
77
+ public import memo_artifacts_standards_traceability::*;
78
+ public import memo_artifacts_standards_cfr_21_820::*;
79
+ public import memo_artifacts_standards_fda_cybersecurity_2023::*;
80
+ public import memo_artifacts_standards_iec_60601_1::*;
81
+ public import memo_artifacts_standards_iec_60601_1_2::*;
82
+ public import memo_artifacts_standards_iec_60812::*;
83
+ public import memo_artifacts_standards_iec_62304::*;
84
+ public import memo_artifacts_standards_iec_62366_1::*;
85
+ public import memo_artifacts_standards_iec_81001_5_1::*;
86
+ public import memo_artifacts_standards_iso_13485::*;
87
+ public import memo_artifacts_standards_iso_14971::*;
88
+ public import memo_artifacts_standards_iso_iec_ieee_42010::*;
77
89
 
78
90
  public import memo_methodology_core::*;
79
91
  public import memo_methodology_rules::*;
@@ -243,6 +255,7 @@ package memo_namespace_artifacts {
243
255
  alias core for memo_namespace_artifacts_core;
244
256
  alias configuration_management for memo_namespace_artifacts_configuration_management;
245
257
  alias documents for memo_namespace_artifacts_documents;
258
+ alias standards for memo_namespace_artifacts_standards;
246
259
  }
247
260
 
248
261
  package memo_namespace_core {
@@ -369,6 +382,23 @@ package memo_namespace_artifacts_documents_risk_management {
369
382
  public import memo_artifacts_documents_risk_management::*;
370
383
  }
371
384
 
385
+ package memo_namespace_artifacts_standards {
386
+ public import memo_artifacts_standards_traceability::*;
387
+ // The library itself: one package per standard, concrete clause instances.
388
+ // Adding a standard is one file next to these and no change anywhere else.
389
+ public import memo_artifacts_standards_cfr_21_820::*;
390
+ public import memo_artifacts_standards_fda_cybersecurity_2023::*;
391
+ public import memo_artifacts_standards_iec_60601_1::*;
392
+ public import memo_artifacts_standards_iec_60601_1_2::*;
393
+ public import memo_artifacts_standards_iec_60812::*;
394
+ public import memo_artifacts_standards_iec_62304::*;
395
+ public import memo_artifacts_standards_iec_62366_1::*;
396
+ public import memo_artifacts_standards_iec_81001_5_1::*;
397
+ public import memo_artifacts_standards_iso_13485::*;
398
+ public import memo_artifacts_standards_iso_14971::*;
399
+ public import memo_artifacts_standards_iso_iec_ieee_42010::*;
400
+ }
401
+
372
402
  package memo_namespace_assurance_verification_validation_clinical_evaluation {
373
403
  public import memo_assurance_verification_validation_clinical_evaluation::*;
374
404
  }
@@ -1,5 +1,7 @@
1
1
  package memo_methodology_core {
2
+ private import Metaobjects::SemanticMetadata;
2
3
  private import ScalarValues::*;
4
+ private import memo_core_relationships::*; // MemoRelationship
3
5
 
4
6
  private import memo_core_common::*;
5
7
  private import memo_core_enumerations::*;
@@ -78,6 +80,14 @@ package memo_methodology_core {
78
80
  // Project bindings may add project or supplier modules to the selected
79
81
  // methodology without requiring those packages to live under memo::.
80
82
  attribute includedModule : String[0..*];
83
+ // The submission regimes this project targets, declared once here.
84
+ // Everything downstream that needs to know which standards apply —
85
+ // `memo standards check`, the standards checklist, the Architect gap
86
+ // badges — reads this, so the regime axis is a project fact stated in
87
+ // SysML rather than a per-document array maintained in 44 places.
88
+ // Empty means the project has not declared its regimes; a report that
89
+ // needs them says so rather than assuming a default market.
90
+ attribute regulatoryRegime : RegulatoryRegimeKind[0..*];
81
91
  part rulePolicy : RulePolicy[0..*];
82
92
  }
83
93
 
@@ -99,4 +109,18 @@ package memo_methodology_core {
99
109
  attribute includedStandard : String;
100
110
  attribute templateDir : String;
101
111
  }
112
+
113
+ // ── Relations owned by this package ─────────────────────────────
114
+ // Moved out of memo_core_relationships: their ends are typed against
115
+ // types declared here, and core must not depend on a domain package.
116
+ connection def ResolvesToMethodology :> MemoRelationship {
117
+ end boundModelElement : MemoPart :>> source;
118
+ end resolvedMethodology : MethodologyDefinition :>> target;
119
+ }
120
+ abstract connection resolvesToMethodologyLinks : ResolvesToMethodology[*];
121
+ metadata def <resolvesToMethodology> ResolvesToMethodologyMetadata :> SemanticMetadata {
122
+ :> annotatedElement : SysML::ConnectionDefinition;
123
+ :> annotatedElement : SysML::ConnectionUsage;
124
+ :>> baseType = resolvesToMethodologyLinks meta SysML::Usage;
125
+ }
102
126
  }
@@ -50,7 +50,7 @@ package memo_methodology_profiles {
50
50
  part requireVerifiedByRule : RelationUsageRule {
51
51
  attribute :>> id = "RULE-002";
52
52
  attribute :>> name = "VerifiedBysRequired";
53
- attribute :>> relationTypeName = "VerifiedBy";
53
+ attribute :>> relationTypeName = "verify";
54
54
  attribute :>> strength = RuleStrengthKind::required;
55
55
  attribute :>> rationaleText = "Safety-relevant requirements and controls shall trace to verification.";
56
56
  }