@memoarchitect/ontology 0.8.24 → 0.10.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +9 -7
  2. package/examples/connected-patient-monitor/model/catalog/project.sysml +3 -1
  3. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +9 -7
  4. package/examples/embedded-infusion-pump/model/catalog/project.sysml +3 -1
  5. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +8 -6
  6. package/examples/functional-logical-physical/model/catalog/project.sysml +3 -1
  7. package/examples/gpca-pump/memo.identity.yaml +2179 -0
  8. package/examples/gpca-pump/methodology/gpca_profiles.sysml +3 -1
  9. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +29 -27
  10. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +115 -114
  11. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +42 -41
  12. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +26 -25
  13. package/examples/gpca-pump/model/catalog/gpca_context.sysml +22 -20
  14. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +14 -13
  15. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +42 -40
  16. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +198 -197
  17. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +121 -125
  18. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +8 -6
  19. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +290 -288
  20. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +164 -163
  21. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +44 -43
  22. package/examples/gpca-pump/model/catalog/gpca_system.sysml +15 -14
  23. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +10 -8
  24. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +62 -61
  25. package/examples/gpca-pump/model/catalog/project.sysml +3 -1
  26. package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +6 -4
  27. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +5 -3
  28. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +5 -3
  29. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +5 -3
  30. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +5 -3
  31. package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +5 -3
  32. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +5 -3
  33. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +5 -3
  34. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +5 -3
  35. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +5 -3
  36. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +5 -3
  37. package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +5 -3
  38. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +5 -3
  39. package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +5 -3
  40. package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +5 -3
  41. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +5 -3
  42. package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +5 -3
  43. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +5 -3
  44. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +5 -3
  45. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +5 -3
  46. package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +5 -3
  47. package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +5 -3
  48. package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +5 -3
  49. package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +6 -4
  50. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +5 -3
  51. package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +5 -3
  52. package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +9 -7
  53. package/examples/ivd-laboratory-system/model/catalog/project.sysml +3 -1
  54. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +6 -4
  55. package/examples/manual-surgical-instrument/model/catalog/project.sysml +3 -1
  56. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -4
  57. package/examples/multidimensional-layers/model/catalog/project.sysml +3 -1
  58. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +20 -18
  59. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +20 -18
  60. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +6 -4
  61. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +9 -7
  62. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +18 -16
  63. package/examples/nested-architecture-dsm/model/catalog/project.sysml +3 -1
  64. package/examples/reusable-instrument/model/catalog/project.sysml +3 -1
  65. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +17 -16
  66. package/examples/ros-mobile-robot/model/catalog/project.sysml +3 -1
  67. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +18 -16
  68. package/examples/software-only-medical-device/model/catalog/project.sysml +3 -1
  69. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +10 -8
  70. package/examples/surgical-closure-workflow/model/catalog/project.sysml +3 -1
  71. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +51 -51
  72. package/examples/surgical-robot/model/catalog/project.sysml +3 -1
  73. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +9 -7
  74. package/examples/sysml-diagram-samples/model/catalog/project.sysml +3 -1
  75. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +10 -8
  76. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +7 -5
  77. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +3 -1
  78. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +2 -1
  79. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +3 -1
  80. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +8 -6
  81. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +3 -1
  82. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +2 -1
  83. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +3 -1
  84. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +11 -7
  85. package/examples/temperature-alarm/memo.identity.yaml +64 -0
  86. package/examples/temperature-alarm/model/catalog/project.sysml +3 -1
  87. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +27 -22
  88. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +14 -12
  89. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +35 -33
  90. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +8 -6
  91. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +14 -13
  92. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +4 -2
  93. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +4 -2
  94. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +12 -10
  95. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +3 -1
  96. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +14 -12
  97. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +17 -15
  98. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +10 -9
  99. package/examples/ui-screen-regions/model/catalog/project.sysml +3 -1
  100. package/examples/ui-screen-regions/model/catalog/relationships.sysml +2 -2
  101. package/examples/ui-screen-regions/model/catalog/traces.sysml +0 -2
  102. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +5 -3
  103. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +5 -3
  104. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +5 -3
  105. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +3 -1
  106. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +3 -1
  107. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +3 -1
  108. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +23 -21
  109. package/extensions/aadl/src/methodology/aadl_methodology.sysml +3 -1
  110. package/extensions/clinical/src/methodology/clinical_methodology.sysml +3 -1
  111. package/extensions/cloud/src/methodology/cloud_methodology.sysml +3 -1
  112. package/extensions/container/src/methodology/container_methodology.sysml +3 -1
  113. package/extensions/messaging/src/methodology/messaging_methodology.sysml +3 -1
  114. package/extensions/ros/src/methodology/ros_methodology.sysml +3 -1
  115. package/extensions/template/src/extension.sysml +3 -1
  116. package/package.json +2 -2
  117. package/src/architecture/functional/behavior/memo_behavior.sysml +1 -1
  118. package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +12 -2
  119. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +0 -11
  120. package/src/architecture/implementation/ui/memo_ui.sysml +0 -23
  121. package/src/architecture/logical/interfaces/memo_interfaces.sysml +3 -1
  122. package/src/architecture/operational/context/use_context/memo_use_context.sysml +3 -11
  123. package/src/architecture/operational/scenarios/memo_scenarios.sysml +0 -10
  124. package/src/architecture/operational/use_cases/memo_use_cases.sysml +7 -11
  125. package/src/architecture/operational/workflows/memo_workflows.sysml +0 -20
  126. package/src/architecture/realization/deployment/memo_deployment.sysml +16 -9
  127. package/src/architecture/realization/physical/memo_physical_architecture.sysml +8 -2
  128. package/src/artifacts/standards/cfr_21_820.sysml +80 -89
  129. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +45 -49
  130. package/src/artifacts/standards/iec_60601_1.sysml +108 -121
  131. package/src/artifacts/standards/iec_60601_1_2.sysml +31 -33
  132. package/src/artifacts/standards/iec_60812.sysml +21 -22
  133. package/src/artifacts/standards/iec_62304.sysml +150 -169
  134. package/src/artifacts/standards/iec_62366_1.sysml +80 -89
  135. package/src/artifacts/standards/iec_81001_5_1.sysml +52 -57
  136. package/src/artifacts/standards/iso_13485.sysml +80 -89
  137. package/src/artifacts/standards/iso_14971.sysml +66 -73
  138. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +15 -15
  139. package/src/assurance/verification_validation/memo_assurance.sysml +7 -12
  140. package/src/core/common/memo_common.sysml +50 -50
  141. package/src/core/enumerations/memo_enumerations.sysml +1 -1
  142. package/src/core/relationships/memo_relationships.sysml +22 -49
  143. package/src/methodology/archetypes/memo_archetypes.sysml +10 -8
  144. package/src/methodology/core/memo_core.sysml +0 -10
  145. package/src/methodology/profiles/memo_profiles.sysml +18 -16
  146. package/src/rules/closure/closure_rules.sysml +22 -20
  147. package/src/rules/crosslayer/cross_layer_rules.sysml +4 -2
  148. package/src/rules/ontology/ontology_invariants.sysml +106 -33
  149. package/src/rules/quantitative/quantitative_rules.sysml +4 -2
  150. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +29 -28
  151. package/src/viewpoints/clinical/clinical_viewpoint.sysml +4 -2
  152. package/src/viewpoints/context/context_viewpoint.sysml +5 -3
  153. package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +5 -3
  154. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -2
  155. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +6 -16
  156. package/src/viewpoints/functional/functional_viewpoint.sysml +4 -2
  157. package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +5 -3
  158. package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +5 -3
  159. package/src/viewpoints/logical/logical_viewpoint.sysml +4 -2
  160. package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +5 -3
  161. package/src/viewpoints/operational/operational_viewpoint.sysml +4 -2
  162. package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +5 -3
  163. package/src/viewpoints/physical/physical_viewpoint.sysml +4 -2
  164. package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +5 -3
  165. package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +5 -3
  166. package/src/viewpoints/rendering/memo_rendering.sysml +220 -40
  167. package/src/viewpoints/requirements/requirements_viewpoint.sysml +4 -2
  168. package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +5 -3
  169. package/src/viewpoints/risk/risk_viewpoint.sysml +4 -2
  170. package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +5 -3
  171. package/src/viewpoints/software/software_viewpoint.sysml +4 -2
  172. package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +5 -3
  173. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +4 -2
  174. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +3 -1
  175. package/src/viewpoints/usability/usability_viewpoint.sysml +4 -2
  176. package/src/viewpoints/verification/verification_viewpoint.sysml +4 -2
  177. package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +5 -3
  178. package/templates/connected-device/model/catalog/project.sysml +3 -1
  179. package/templates/default/model/catalog/project.sysml +3 -1
  180. package/templates/infusion-pump/model/catalog/project.sysml +3 -1
  181. package/templates/monitoring-device/model/catalog/project.sysml +3 -1
  182. package/templates/samd/model/catalog/project.sysml +3 -1
@@ -12,8 +12,10 @@ package memo_artifacts_standards_iso_iec_ieee_42010 {
12
12
  private import memo_core_relationships::*;
13
13
  private import memo_artifacts_standards_traceability::*;
14
14
 
15
+ private import memo_core_common::*;
16
+ private import memo_core_common::MemoIdentity;
15
17
  item isoIecIeee42010 : RegulatoryStandard {
16
- attribute :>> id = "STD-ISO-IEC-IEEE-42010";
18
+ @MemoIdentity { :>> providedId = "STD-ISO-IEC-IEEE-42010"; }
17
19
  attribute :>> name = "ISOIECIEEE42010";
18
20
  attribute :>> designation = "ISO/IEC/IEEE 42010:2022";
19
21
  attribute :>> edition = "2022";
@@ -22,21 +24,19 @@ package memo_artifacts_standards_iso_iec_ieee_42010 {
22
24
  // reference standard, cited by documents rather than required by a
23
25
  // market. Empty is the authored value, not an omission — see
24
26
  // appliesToRegime in memo_artifacts_standards_traceability.
27
+ item isoIecIeee42010Clause5 : StandardClause {
28
+ @MemoIdentity { :>> providedId = "STD-ISO-IEC-IEEE-42010-5"; }
29
+ attribute :>> name = "ISOIECIEEE42010Clause5";
30
+ attribute :>> clauseNumber = "5";
31
+ attribute :>> normativeStrength = "shall";
32
+ }
33
+ item isoIecIeee42010Clause6 : StandardClause {
34
+ @MemoIdentity { :>> providedId = "STD-ISO-IEC-IEEE-42010-6"; }
35
+ attribute :>> name = "ISOIECIEEE42010Clause6";
36
+ attribute :>> clauseNumber = "6";
37
+ attribute :>> normativeStrength = "shall";
38
+ }
25
39
  }
26
40
 
27
- item isoIecIeee42010Clause5 : StandardClause {
28
- attribute :>> id = "STD-ISO-IEC-IEEE-42010-5";
29
- attribute :>> name = "ISOIECIEEE42010Clause5";
30
- attribute :>> clauseNumber = "5";
31
- attribute :>> normativeStrength = "shall";
32
- }
33
- item isoIecIeee42010Clause6 : StandardClause {
34
- attribute :>> id = "STD-ISO-IEC-IEEE-42010-6";
35
- attribute :>> name = "ISOIECIEEE42010Clause6";
36
- attribute :>> clauseNumber = "6";
37
- attribute :>> normativeStrength = "shall";
38
- }
39
41
 
40
- connection isoIecIeee42010Has5 : Composes connect parent ::> isoIecIeee42010 to child ::> isoIecIeee42010Clause5;
41
- connection isoIecIeee42010Has6 : Composes connect parent ::> isoIecIeee42010 to child ::> isoIecIeee42010Clause6;
42
42
  }
@@ -19,8 +19,10 @@ package memo_assurance_verification_validation {
19
19
  // EXECUTION state, not an editorial one; execution state belongs in an
20
20
  // attribute of its own (see RiskControlMeasure.verificationStatus), not in
21
21
  // a second spelling of `status`.
22
- verification def VerificationCase :> MemoVerificationCase {
23
- attribute methodKind : VerificationMethodKind;
22
+ // Specializes the standard library verification case as well as MEMO's
23
+ // base, rather than shadowing it — see the note on UseCase.
24
+ verification def VerificationCase :> MemoVerificationCase, VerificationCases::VerificationCase {
25
+ attribute methodKind : MemoVerificationMethodKind;
24
26
  attribute acceptanceCriteria : String;
25
27
  }
26
28
  verification def ValidationCase :> MemoVerificationCase {
@@ -32,14 +34,7 @@ package memo_assurance_verification_validation {
32
34
  // Operational validation confirms the user's goal is achieved in the
33
35
  // use environment (§5): ValidationCase validates a UseCase.
34
36
  // Safety-critical functions must trace to verification (rules/coverage).
35
- connection def ExecutesScenario :> MemoRelationship {
36
- end verificationCase : VerificationCase :>> source;
37
- end scenario : OperativeScenario :>> target;
38
- }
39
- abstract connection executesScenarioLinks : ExecutesScenario[*];
40
- metadata def <executesScenario> ExecutesScenarioMetadata :> SemanticMetadata {
41
- :> annotatedElement : SysML::ConnectionDefinition;
42
- :> annotatedElement : SysML::ConnectionUsage;
43
- :>> baseType = executesScenarioLinks meta SysML::Usage;
44
- }
37
+ // `ExecutesScenario` is native `perform` (2026-08-18): OperativeScenario
38
+ // is an `action def`, so write `perform <scenario>;` inside the
39
+ // verification case, as `InvolvesFunction` already does.
45
40
  }
@@ -34,6 +34,56 @@ package memo_core_common {
34
34
  private import memo_core_terminology::*;
35
35
  private import memo_core_enumerations::*;
36
36
 
37
+ // The metaclass-agnostic carrier for MEMO's identity fields.
38
+ //
39
+ // A `metadata def` annotates an element of ANY metaclass — restriction is
40
+ // opt-in through `annotatedElement`, and this one declares none. That is
41
+ // what the per-metaclass base definitions below cannot do: KerML will not
42
+ // let an action, port, item, requirement or connection inherit from a part
43
+ // def, which is why the identification core is currently declared ten
44
+ // times. Metadata has no such limit, so one declaration replaces ten.
45
+ //
46
+ // An element has five identities and they are not interchangeable:
47
+ //
48
+ // 1. code reference `sfnAcquireMap` native declaredName
49
+ // 2. display label "Acquire EA Map" `label`, below
50
+ // 3. number id `SFN-1` assigned, never authored
51
+ // 4. provided id `SPEC-4471` `providedId`, below
52
+ // 5. technical uuid `e2f75cf6-…` `uuid`, below
53
+ //
54
+ // 1 is native and needs no field here. 3 is generated by the compiler and
55
+ // recorded in `memo.identity.yaml`: it is monotonic, gaps are kept, and a
56
+ // retired number is never reused, so nothing authors it by hand.
57
+ //
58
+ // `label` is NOT a duplicate of the native name, which is the reading that
59
+ // nearly deleted it: the native name is a lowerCamelCase identifier and
60
+ // must be unique in its namespace, while a label is free text that
61
+ // legitimately repeats — measured 2026-08-18, 1278 labels across the
62
+ // ontology and examples share only 1216 distinct values, because seven
63
+ // different ports are all correctly labelled "TLM_MODE_IN". A label
64
+ // therefore cannot live in a name slot, native or otherwise.
65
+ //
66
+ // `providedId` is the identifier an EXTERNAL system knows the element by,
67
+ // and it exists because that system's scheme is not MEMO's: a customer
68
+ // numbering software requirements `SPEC-4471` cannot be made to use `SWR-`,
69
+ // and overwriting the generated number to please them would break the
70
+ // guarantee that numbers are never reassigned.
71
+ //
72
+ // `uuid` is machine identity. Authored values win over the registry, which
73
+ // wins over derivation — so an element whose file must move can pin its own
74
+ // uuid, which is what the attribute always advertised.
75
+ //
76
+ // Deliberately absent: `name` and `description` (native name and `doc`),
77
+ // `rationale` (standard `@Rationale`), and `id` — superseded by the
78
+ // generated number id and by `providedId`.
79
+ metadata def MemoIdentity {
80
+ attribute label : String[0..1];
81
+ attribute providedId : String[0..1];
82
+ attribute uuid : String[0..1];
83
+ attribute shortDescription : String[0..1];
84
+ attribute sourceReference : String[0..1];
85
+ }
86
+
37
87
  // ─── Single abstract part root ──────────────────────────────────
38
88
  // Every structural MEMO concept specializes MemoPart. Identity and
39
89
  // traceability are attributes of this one root — MEMO has no separate
@@ -48,8 +98,6 @@ package memo_core_common {
48
98
  // cross-cutting concern, and editorial status.
49
99
  abstract part def MemoPart {
50
100
  // identity
51
- attribute id : String;
52
- attribute uuid : String;
53
101
  attribute name : String;
54
102
  // Two description registers on every MEMO element, because views have
55
103
  // two densities. `shortDescription` is the one-line form a table cell,
@@ -58,11 +106,8 @@ package memo_core_common {
58
106
  // renders. A view picks the register that fits — it never truncates
59
107
  // the long one, because a silently clipped sentence in a DHF table is
60
108
  // a defect, not a layout choice.
61
- attribute shortDescription : String;
62
109
  attribute description : String;
63
110
  // traceability
64
- attribute rationale : String;
65
- attribute sourceReference : String;
66
111
  // editorial status and lifecycle
67
112
  attribute status : ElementStatusKind;
68
113
  attribute lifecycleState : LifecycleStateKind;
@@ -123,25 +168,15 @@ package memo_core_common {
123
168
  // Behavioral foundation: operational activities, tasks, system actions,
124
169
  // and interaction steps specialize MemoAction.
125
170
  action def MemoAction {
126
- attribute id : String;
127
- attribute uuid : String;
128
171
  attribute name : String;
129
- attribute shortDescription : String;
130
172
  attribute description : String;
131
- attribute rationale : String;
132
- attribute sourceReference : String;
133
173
  attribute status : ElementStatusKind;
134
174
  }
135
175
 
136
176
  // Boundary feature foundation for typed ports.
137
177
  port def MemoPort {
138
- attribute id : String;
139
- attribute uuid : String;
140
178
  attribute name : String;
141
- attribute shortDescription : String;
142
179
  attribute description : String;
143
- attribute rationale : String;
144
- attribute sourceReference : String;
145
180
  attribute status : ElementStatusKind;
146
181
  }
147
182
 
@@ -149,13 +184,8 @@ package memo_core_common {
149
184
  abstract interface def MemoInterface {
150
185
  end source;
151
186
  end target;
152
- attribute id : String;
153
- attribute uuid : String;
154
187
  attribute name : String;
155
- attribute shortDescription : String;
156
188
  attribute description : String;
157
- attribute rationale : String;
158
- attribute sourceReference : String;
159
189
  }
160
190
 
161
191
  // Single item foundation. Standards, hazards, stored software data, and
@@ -163,13 +193,8 @@ package memo_core_common {
163
193
  // exchanged is expressed by its use in a port or flow, not by a second
164
194
  // ontology root.
165
195
  abstract item def MemoItem {
166
- attribute id : String;
167
- attribute uuid : String;
168
196
  attribute name : String;
169
- attribute shortDescription : String;
170
197
  attribute description : String;
171
- attribute rationale : String;
172
- attribute sourceReference : String;
173
198
  attribute status : ElementStatusKind;
174
199
  // What the item CARRIES, as distinct from what it is called. Removed
175
200
  // by `595bfac` while modelling native wrappers; nothing replaced them,
@@ -190,26 +215,16 @@ package memo_core_common {
190
215
  // references; identity is carried here so use cases do not maintain a
191
216
  // partial hand-written copy of the MEMO identification core.
192
217
  abstract use case def MemoUseCase {
193
- attribute id : String;
194
- attribute uuid : String;
195
218
  attribute name : String;
196
- attribute shortDescription : String;
197
219
  attribute description : String;
198
- attribute rationale : String;
199
- attribute sourceReference : String;
200
220
  attribute status : ElementStatusKind;
201
221
  }
202
222
 
203
223
  // General constraint foundation. Executable consistency rules and
204
224
  // reusable quantitative constraints are both native constraint defs.
205
225
  abstract constraint def MemoConstraint {
206
- attribute id : String;
207
- attribute uuid : String;
208
226
  attribute name : String;
209
- attribute shortDescription : String;
210
227
  attribute description : String;
211
- attribute rationale : String;
212
- attribute sourceReference : String;
213
228
  attribute status : ElementStatusKind;
214
229
  }
215
230
 
@@ -220,13 +235,8 @@ package memo_core_common {
220
235
  // say "a need or a requirement" with one type name — before it, every end
221
236
  // that had to accept both was left untyped.
222
237
  abstract requirement def MemoRequirementElement {
223
- attribute id : String;
224
- attribute uuid : String;
225
238
  attribute name : String;
226
- attribute shortDescription : String;
227
239
  attribute description : String;
228
- attribute rationale : String;
229
- attribute sourceReference : String;
230
240
  attribute status : ElementStatusKind;
231
241
  attribute statement : String;
232
242
  }
@@ -245,13 +255,8 @@ package memo_core_common {
245
255
  // the part-based MemoPart — so, like MemoAction, it re-declares the small
246
256
  // identification core rather than inheriting it.
247
257
  verification def MemoVerificationCase {
248
- attribute id : String;
249
- attribute uuid : String;
250
258
  attribute name : String;
251
- attribute shortDescription : String;
252
259
  attribute description : String;
253
- attribute rationale : String;
254
- attribute sourceReference : String;
255
260
  attribute status : ElementStatusKind;
256
261
  }
257
262
 
@@ -264,13 +269,8 @@ package memo_core_common {
264
269
 
265
270
  state def MemoState {
266
271
  attribute stateKind : StateKind;
267
- attribute id : String;
268
- attribute uuid : String;
269
272
  attribute name : String;
270
- attribute shortDescription : String;
271
273
  attribute description : String;
272
- attribute rationale : String;
273
- attribute sourceReference : String;
274
274
  attribute status : ElementStatusKind;
275
275
  attribute modeKind : String;
276
276
  attribute entryCondition : String;
@@ -142,7 +142,7 @@ package memo_core_enumerations {
142
142
  enum maintenance;
143
143
  enum obsolete;
144
144
  }
145
- enum def VerificationMethodKind {
145
+ enum def MemoVerificationMethodKind {
146
146
  enum inspection;
147
147
  enum analytical;
148
148
  enum demonstration;
@@ -7,6 +7,7 @@ package memo_core_relationships {
7
7
  private import memo_core_common::*;
8
8
  private import memo_core_enumerations::*;
9
9
 
10
+ private import Allocations::Allocation;
10
11
  // All MEMO relations are native SysML v2 `connection def`s (each is a
11
12
  // Connection/Association), specializing the MemoRelationship base. The
12
13
  // relationship name is the verb; the RelationshipRegistry derives the
@@ -107,17 +108,6 @@ package memo_core_relationships {
107
108
  // only when no specific relation carries the meaning, and say why in the
108
109
  // inherited `rationale` — an untyped link with no stated reason is an
109
110
  // audit gap, not a model fact.
110
- connection def MemoLink :> MemoRelationship {
111
- doc /* Generic association between any two model elements. */
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;
120
- }
121
111
 
122
112
  connection def DerivesFrom :> MemoRelationship {
123
113
  // Drivers span metaclasses — a need is a requirement def, a hazard an
@@ -206,57 +196,40 @@ package memo_core_relationships {
206
196
 
207
197
  // Enables unifies the former EnablesWorkflow / EnablesActivity synonyms
208
198
  // (an enabling system/function enables a workflow/activity).
209
- connection def Enables :> MemoRelationship {
210
- end enabling :>> source;
211
- end enabled : MemoAction :>> target;
212
- }
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;
218
- }
199
+ // `Enables` is native `dependency` (2026-08-18): write
200
+ // `dependency from <enabling> to <enabled>;`. Same call as `Supports`,
201
+ // which was deleted as a duplicate of both `dependency` and `Enables`.
219
202
 
220
- connection def HostedBy :> MemoRelationship {
203
+ // A processing node hosted by an assembly is allocated to it. The end
204
+ // NAMES were already right; two of the three usages wrote them in reverse
205
+ // order, and the builder binds by position, so those two edges pointed the
206
+ // wrong way. See the reversed-end-name lint in memo-tools.
207
+ allocation def HostedBy :> MemoRelationship, Allocations::Allocation {
221
208
  end processingNode : MemoPart :>> source;
222
209
  end hostAssembly : MemoPart :>> target;
223
210
  }
224
211
  abstract connection hostedByLinks : HostedBy[*];
225
212
  metadata def <hostedBy> HostedByMetadata :> SemanticMetadata {
226
- :> annotatedElement : SysML::ConnectionDefinition;
227
- :> annotatedElement : SysML::ConnectionUsage;
213
+ :> annotatedElement : SysML::AllocationDefinition;
214
+ :> annotatedElement : SysML::AllocationUsage;
228
215
  :>> baseType = hostedByLinks meta SysML::Usage;
229
216
  }
230
217
 
231
218
 
232
219
 
233
220
 
234
- // Composes is the single whole/part decomposition relation. It unifies the
235
- // former ComposesLogical / AssemblyComprises / Contains{Component,Element} /
236
- // {Workflow,Task,Activity,Scenario}Comprises* / FlowComprisesSpec /
237
- // Collection membership is carried by the end instance.
238
- // types, so the ends are generic MemoPart.
239
- connection def Composes :> MemoRelationship {
240
- end parent :>> source;
241
- end child :>> target;
242
- }
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;
248
- }
221
+ // `Composes` is deleted (R10-S7). Containment is NESTING — the child is
222
+ // declared inside the parent — which is how SysML v2 models composition:
223
+ // composite feature ownership, not a link. The relation specialized
224
+ // `Connections::BinaryConnection`, "a link between two things WITHIN some
225
+ // containing structure", so it was the wrong category for the containment
226
+ // itself, and the corpus has no composition connection to specialize.
227
+ //
228
+ // Nothing is lost: the builder synthesizes a `composes` edge from every
229
+ // nested part and item, so rules, the DSM and traceability read exactly the
230
+ // graph they read before. The edge type is registered natively in
231
+ // memo-tools' relationship registry.
249
232
 
250
- connection def AnalyzedBy :> MemoRelationship {
251
- end element : MemoPart :>> source;
252
- end analysisArtifact : AnalysisArtifact :>> target;
253
- }
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;
259
- }
260
233
 
261
234
  connection def BindsToInterface :> MemoRelationship {
262
235
  end portElement :>> source;
@@ -3,8 +3,10 @@ package memo_methodology_archetypes {
3
3
 
4
4
  private import memo_methodology_core::*;
5
5
 
6
+ private import memo_core_common::*;
7
+ private import memo_core_common::MemoIdentity;
6
8
  part minimal : Archetype {
7
- attribute :>> id = "ARCH-MINIMAL";
9
+ @MemoIdentity { :>> providedId = "ARCH-MINIMAL"; }
8
10
  attribute :>> name = "Minimal";
9
11
  attribute :>> label = "Minimal";
10
12
  attribute :>> description = "Core ontology only — requirements, hazards, basic architecture (~53 kinds)";
@@ -15,7 +17,7 @@ package memo_methodology_archetypes {
15
17
  }
16
18
 
17
19
  part standardArchetype : Archetype {
18
- attribute :>> id = "ARCH-STANDARD";
20
+ @MemoIdentity { :>> providedId = "ARCH-STANDARD"; }
19
21
  attribute :>> name = "Standard";
20
22
  attribute :>> label = "Standard";
21
23
  attribute :>> description = "Core + risk + software + DHF — covers most Class II devices (~120 kinds)";
@@ -26,7 +28,7 @@ package memo_methodology_archetypes {
26
28
  }
27
29
 
28
30
  part full : Archetype {
29
- attribute :>> id = "ARCH-FULL";
31
+ @MemoIdentity { :>> providedId = "ARCH-FULL"; }
30
32
  attribute :>> name = "Full";
31
33
  attribute :>> label = "Full";
32
34
  attribute :>> description = "All architecture layers, standards, and extensions (~200+ kinds)";
@@ -37,7 +39,7 @@ package memo_methodology_archetypes {
37
39
  }
38
40
 
39
41
  part samd : Archetype {
40
- attribute :>> id = "ARCH-SAMD";
42
+ @MemoIdentity { :>> providedId = "ARCH-SAMD"; }
41
43
  attribute :>> name = "SaMD";
42
44
  attribute :>> label = "Software as Medical Device (SaMD)";
43
45
  attribute :>> description = "Clinical decision support, diagnostic algorithm, AI/ML tool, mobile medical app";
@@ -48,7 +50,7 @@ package memo_methodology_archetypes {
48
50
  }
49
51
 
50
52
  part connected : Archetype {
51
- attribute :>> id = "ARCH-CONNECTED";
53
+ @MemoIdentity { :>> providedId = "ARCH-CONNECTED"; }
52
54
  attribute :>> name = "Connected";
53
55
  attribute :>> label = "Connected / IoT Device";
54
56
  attribute :>> description = "Remote monitoring, wearable, smart device with cloud connectivity and cybersecurity requirements";
@@ -59,7 +61,7 @@ package memo_methodology_archetypes {
59
61
  }
60
62
 
61
63
  part monitoring : Archetype {
62
- attribute :>> id = "ARCH-MONITORING";
64
+ @MemoIdentity { :>> providedId = "ARCH-MONITORING"; }
63
65
  attribute :>> name = "Monitoring";
64
66
  attribute :>> label = "Monitoring / Diagnostic Device";
65
67
  attribute :>> description = "Patient monitor, ECG, SpO2, vital signs, bedside diagnostic equipment";
@@ -70,7 +72,7 @@ package memo_methodology_archetypes {
70
72
  }
71
73
 
72
74
  part infusion_pump : Archetype {
73
- attribute :>> id = "ARCH-INFUSION";
75
+ @MemoIdentity { :>> providedId = "ARCH-INFUSION"; }
74
76
  attribute :>> name = "InfusionPump";
75
77
  attribute :>> label = "Infusion / Drug Delivery Device";
76
78
  attribute :>> description = "Infusion pump, syringe driver, implantable drug delivery, dosing device";
@@ -81,7 +83,7 @@ package memo_methodology_archetypes {
81
83
  }
82
84
 
83
85
  part blank : Archetype {
84
- attribute :>> id = "ARCH-BLANK";
86
+ @MemoIdentity { :>> providedId = "ARCH-BLANK"; }
85
87
  attribute :>> name = "Blank";
86
88
  attribute :>> label = "Blank Project";
87
89
  attribute :>> description = "Start from scratch with a minimal SysML shell";
@@ -113,14 +113,4 @@ package memo_methodology_core {
113
113
  // ── Relations owned by this package ─────────────────────────────
114
114
  // Moved out of memo_core_relationships: their ends are typed against
115
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
- }
126
116
  }
@@ -9,8 +9,10 @@ package memo_methodology_profiles {
9
9
  private import memo_core_enumerations::*;
10
10
  private import memo_core_methodology_scope::*;
11
11
 
12
+ private import memo_core_common::*;
13
+ private import memo_core_common::MemoIdentity;
12
14
  part mdCoreLibrary : MethodologyLibrary {
13
- attribute :>> id = "METHLIB-001";
15
+ @MemoIdentity { :>> providedId = "METHLIB-001"; }
14
16
  attribute :>> name = "MedicalDeviceMethodologyLibrary";
15
17
  attribute :>> version = "0.1";
16
18
  attribute :>> domain = "medical device modeling";
@@ -31,7 +33,7 @@ package memo_methodology_profiles {
31
33
  // that into `allAvailable` preserves the effective result and removes the
32
34
  // second scope authority.
33
35
  part mdDefaultDefinition : MethodologyDefinition {
34
- attribute :>> id = "METH-MD-DEFAULT";
36
+ @MemoIdentity { :>> providedId = "METH-MD-DEFAULT"; }
35
37
  attribute :>> name = "MedicalDeviceDefault";
36
38
  attribute :>> version = "0.6.5";
37
39
  attribute :>> domain = "medical device modeling";
@@ -40,7 +42,7 @@ package memo_methodology_profiles {
40
42
  }
41
43
 
42
44
  part useRiskAndResidualRule : ElementUsageRule {
43
- attribute :>> id = "RULE-001";
45
+ @MemoIdentity { :>> providedId = "RULE-001"; }
44
46
  attribute :>> name = "UseRiskAndResidualRisk";
45
47
  attribute :>> elementTypeName = "Risk,ResidualRisk,RiskMatrix";
46
48
  attribute :>> strength = RuleStrengthKind::recommended;
@@ -48,7 +50,7 @@ package memo_methodology_profiles {
48
50
  }
49
51
 
50
52
  part requireVerifiedByRule : RelationUsageRule {
51
- attribute :>> id = "RULE-002";
53
+ @MemoIdentity { :>> providedId = "RULE-002"; }
52
54
  attribute :>> name = "VerifiedBysRequired";
53
55
  attribute :>> relationTypeName = "verify";
54
56
  attribute :>> strength = RuleStrengthKind::required;
@@ -56,7 +58,7 @@ package memo_methodology_profiles {
56
58
  }
57
59
 
58
60
  part lightRiskPattern : ModelingPattern {
59
- attribute :>> id = "PAT-001";
61
+ @MemoIdentity { :>> providedId = "PAT-001"; }
60
62
  attribute :>> name = "LightRiskBeforeAfterPattern";
61
63
  attribute :>> intent = "Model hazard chain, before/after mitigation risk, controls, and residual evaluation in a lightweight way.";
62
64
  attribute :>> stage = WorkflowStageKind::risk;
@@ -64,7 +66,7 @@ package memo_methodology_profiles {
64
66
  }
65
67
 
66
68
  part lightTracePattern : ModelingPattern {
67
- attribute :>> id = "PAT-002";
69
+ @MemoIdentity { :>> providedId = "PAT-002"; }
68
70
  attribute :>> name = "CoreTracePattern";
69
71
  attribute :>> intent = "Need or risk to requirement, requirement to architecture, requirement/control to verification.";
70
72
  attribute :>> stage = WorkflowStageKind::requirements;
@@ -72,7 +74,7 @@ package memo_methodology_profiles {
72
74
  }
73
75
 
74
76
  action stepRequirements : MethodologyWorkflowStep {
75
- attribute :>> id = "STEP-001";
77
+ @MemoIdentity { :>> providedId = "STEP-001"; }
76
78
  attribute :>> name = "CaptureRequirements";
77
79
  attribute :>> stage = WorkflowStageKind::requirements;
78
80
  attribute :>> objectiveDescription = "Capture stakeholder needs and derive requirements.";
@@ -81,7 +83,7 @@ package memo_methodology_profiles {
81
83
  }
82
84
 
83
85
  action stepArchitecture : MethodologyWorkflowStep {
84
- attribute :>> id = "STEP-002";
86
+ @MemoIdentity { :>> providedId = "STEP-002"; }
85
87
  attribute :>> name = "DefineArchitecture";
86
88
  attribute :>> stage = WorkflowStageKind::architecture;
87
89
  attribute :>> objectiveDescription = "Define key software and hardware architecture elements and interfaces.";
@@ -90,7 +92,7 @@ package memo_methodology_profiles {
90
92
  }
91
93
 
92
94
  action stepRisk : MethodologyWorkflowStep {
93
- attribute :>> id = "STEP-003";
95
+ @MemoIdentity { :>> providedId = "STEP-003"; }
94
96
  attribute :>> name = "PerformRiskAnalysis";
95
97
  attribute :>> stage = WorkflowStageKind::risk;
96
98
  attribute :>> objectiveDescription = "Create core risk chain and controls.";
@@ -99,7 +101,7 @@ package memo_methodology_profiles {
99
101
  }
100
102
 
101
103
  action stepVerification : MethodologyWorkflowStep {
102
- attribute :>> id = "STEP-004";
104
+ @MemoIdentity { :>> providedId = "STEP-004"; }
103
105
  attribute :>> name = "PlanVerification";
104
106
  attribute :>> stage = WorkflowStageKind::verificationStage;
105
107
  attribute :>> objectiveDescription = "Define verification and evidence expectations.";
@@ -111,7 +113,7 @@ package memo_methodology_profiles {
111
113
  first stepRisk then stepVerification;
112
114
 
113
115
  part gateLightComplete : QualityGate {
114
- attribute :>> id = "GATE-001";
116
+ @MemoIdentity { :>> providedId = "GATE-001"; }
115
117
  attribute :>> name = "LightMethodReady";
116
118
  attribute :>> gateStage = WorkflowStageKind::verificationStage;
117
119
  attribute :>> passCriteria = "Core traceability, risk, verification, and RMF view support are present.";
@@ -123,7 +125,7 @@ package memo_methodology_profiles {
123
125
  // references its methodology with a typed SysML reference.
124
126
 
125
127
  part rmpDoc : DhfDocumentBinding {
126
- attribute :>> id = "DHF-001";
128
+ @MemoIdentity { :>> providedId = "DHF-001"; }
127
129
  attribute :>> name = "RiskManagementPlan";
128
130
  attribute :>> documentTitle = "Risk Management Plan";
129
131
  attribute :>> groupLabel = "Risk Management";
@@ -135,7 +137,7 @@ package memo_methodology_profiles {
135
137
  }
136
138
 
137
139
  part harDoc : DhfDocumentBinding {
138
- attribute :>> id = "DHF-002";
140
+ @MemoIdentity { :>> providedId = "DHF-002"; }
139
141
  attribute :>> name = "HazardAnalysisReport";
140
142
  attribute :>> documentTitle = "Hazard Analysis Report";
141
143
  attribute :>> groupLabel = "Risk Management";
@@ -147,7 +149,7 @@ package memo_methodology_profiles {
147
149
  }
148
150
 
149
151
  part sadDoc : DhfDocumentBinding {
150
- attribute :>> id = "DHF-003";
152
+ @MemoIdentity { :>> providedId = "DHF-003"; }
151
153
  attribute :>> name = "SoftwareArchitectureDescription";
152
154
  attribute :>> documentTitle = "Software Architecture Description";
153
155
  attribute :>> groupLabel = "Software";
@@ -159,7 +161,7 @@ package memo_methodology_profiles {
159
161
  }
160
162
 
161
163
  part threatModelDoc : DhfDocumentBinding {
162
- attribute :>> id = "DHF-004";
164
+ @MemoIdentity { :>> providedId = "DHF-004"; }
163
165
  attribute :>> name = "CybersecurityThreatModel";
164
166
  attribute :>> documentTitle = "Threat Model";
165
167
  attribute :>> groupLabel = "Cybersecurity";
@@ -171,7 +173,7 @@ package memo_methodology_profiles {
171
173
  }
172
174
 
173
175
  part vvPlanDoc : DhfDocumentBinding {
174
- attribute :>> id = "DHF-005";
176
+ @MemoIdentity { :>> providedId = "DHF-005"; }
175
177
  attribute :>> name = "VerificationValidationPlan";
176
178
  attribute :>> documentTitle = "V&V Plan";
177
179
  attribute :>> groupLabel = "Verification & Validation";