@memoarchitect/ontology 0.6.5 → 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 (394) 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/connected-patient-monitor/model/catalog/project.sysml +24 -0
  4. package/examples/connected-patient-monitor/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  5. package/examples/connected-patient-monitor/model/{viewpoints → catalog/viewpoints/unassigned/views}/connected_patient_monitor_overview.sysml +1 -1
  6. package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +7 -5
  7. package/examples/embedded-infusion-pump/model/catalog/project.sysml +24 -0
  8. package/examples/embedded-infusion-pump/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  9. package/examples/embedded-infusion-pump/model/{viewpoints → catalog/viewpoints/unassigned/views}/embedded_infusion_pump_overview.sysml +1 -1
  10. package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +5 -5
  11. package/examples/functional-logical-physical/model/catalog/project.sysml +24 -0
  12. package/examples/functional-logical-physical/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  13. package/examples/functional-logical-physical/model/{viewpoints → catalog/viewpoints/unassigned/views}/functional_logical_physical_overview.sysml +1 -1
  14. package/examples/gpca-pump/methodology/gpca_methodology.sysml +7 -8
  15. package/examples/gpca-pump/methodology/gpca_profiles.sysml +89 -11
  16. package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +19 -9
  17. package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +342 -100
  18. package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +27 -13
  19. package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +329 -272
  20. package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +57 -16
  21. package/examples/gpca-pump/model/catalog/gpca_context.sysml +12 -8
  22. package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +14 -10
  23. package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +1 -15
  24. package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +181 -264
  25. package/examples/gpca-pump/model/catalog/gpca_operational.sysml +95 -60
  26. package/examples/gpca-pump/model/catalog/gpca_physical.sysml +6 -11
  27. package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +102 -101
  28. package/examples/gpca-pump/model/catalog/gpca_risk.sysml +1 -1
  29. package/examples/gpca-pump/model/catalog/gpca_standards.sysml +161 -0
  30. package/examples/gpca-pump/model/catalog/gpca_system.sysml +47 -30
  31. package/examples/gpca-pump/model/catalog/gpca_trace.sysml +301 -354
  32. package/examples/gpca-pump/model/catalog/gpca_verification.sysml +116 -36
  33. package/examples/gpca-pump/model/catalog/project.sysml +26 -0
  34. package/examples/gpca-pump/model/catalog/viewpoints/context/viewpoint.sysml +8 -0
  35. package/examples/gpca-pump/model/{views → catalog/viewpoints/context/views}/context_system_context_view.sysml +4 -4
  36. package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/viewpoint.sysml +8 -0
  37. package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/cybersecurity_cybersecurity_view.sysml +4 -4
  38. package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/document_cyber_assessment_view.sysml +4 -4
  39. package/examples/gpca-pump/model/{views → catalog/viewpoints/cybersecurity/views}/document_threat_model_view.sysml +5 -5
  40. package/examples/gpca-pump/model/catalog/viewpoints/functional/viewpoint.sysml +8 -0
  41. package/examples/gpca-pump/model/{views → catalog/viewpoints/functional/views}/functional_function_allocation_view.sysml +2 -2
  42. package/examples/gpca-pump/model/{views → catalog/viewpoints/functional/views}/functional_function_browser_view.sysml +3 -3
  43. package/examples/gpca-pump/model/catalog/viewpoints/logical/viewpoint.sysml +8 -0
  44. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/behavior_action_flow_view.sysml +3 -3
  45. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/document_architecture_description_view.sysml +8 -8
  46. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_device_interconnect_view.sysml +5 -5
  47. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_logical_architecture_view.sysml +3 -3
  48. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_mode_state_view.sysml +4 -4
  49. package/examples/gpca-pump/model/{views → catalog/viewpoints/logical/views}/logical_system_decomposition_view.sysml +3 -3
  50. package/examples/gpca-pump/model/catalog/viewpoints/operational/viewpoint.sysml +8 -0
  51. package/examples/gpca-pump/model/{views → catalog/viewpoints/operational/views}/operational_scenario_sequence_view.sysml +3 -3
  52. package/examples/gpca-pump/model/{views → catalog/viewpoints/operational/views}/operational_use_case_view.sysml +4 -4
  53. package/examples/gpca-pump/model/catalog/viewpoints/physical/viewpoint.sysml +8 -0
  54. package/examples/gpca-pump/model/{views → catalog/viewpoints/physical/views}/physical_physical_bom_view.sysml +2 -2
  55. package/examples/gpca-pump/model/catalog/viewpoints/requirements/viewpoint.sysml +8 -0
  56. package/examples/gpca-pump/model/{views → catalog/viewpoints/requirements/views}/document_dhf_index_view.sysml +8 -8
  57. package/examples/gpca-pump/model/{views → catalog/viewpoints/requirements/views}/requirements_requirements_trace_view.sysml +2 -2
  58. package/examples/gpca-pump/model/catalog/viewpoints/risk/viewpoint.sysml +8 -0
  59. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/document_hazard_analysis_view.sysml +8 -5
  60. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/document_rmf_view.sysml +7 -5
  61. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/risk_fmea_view.sysml +3 -3
  62. package/examples/gpca-pump/model/{views → catalog/viewpoints/risk/views}/risk_risk_chain_view.sysml +3 -3
  63. package/examples/gpca-pump/model/catalog/viewpoints/software/viewpoint.sysml +8 -0
  64. package/examples/gpca-pump/model/{views → catalog/viewpoints/software/views}/document_sdd_view.sysml +4 -4
  65. package/examples/gpca-pump/model/{views → catalog/viewpoints/software/views}/software_software_architecture_view.sysml +5 -5
  66. package/examples/gpca-pump/model/catalog/viewpoints/usability/viewpoint.sysml +8 -0
  67. package/examples/gpca-pump/model/{views → catalog/viewpoints/usability/views}/document_usability_view.sysml +8 -6
  68. package/examples/gpca-pump/model/catalog/viewpoints/verification/viewpoint.sysml +8 -0
  69. package/examples/gpca-pump/model/{views → catalog/viewpoints/verification/views}/document_vv_view.sysml +7 -5
  70. package/examples/gpca-pump/model/{views → catalog/viewpoints/verification/views}/verification_verification_coverage_view.sysml +3 -3
  71. package/examples/ivd-laboratory-system/model/catalog/project.sysml +24 -0
  72. package/examples/ivd-laboratory-system/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  73. package/examples/ivd-laboratory-system/model/{viewpoints → catalog/viewpoints/unassigned/views}/ivd_laboratory_system_overview.sysml +1 -1
  74. package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +4 -2
  75. package/examples/manual-surgical-instrument/model/catalog/project.sysml +24 -0
  76. package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  77. package/examples/manual-surgical-instrument/model/{viewpoints → catalog/viewpoints/unassigned/views}/manual_surgical_instrument_overview.sysml +1 -1
  78. package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -2
  79. package/examples/multidimensional-layers/model/catalog/project.sysml +24 -0
  80. package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  81. package/examples/multidimensional-layers/model/{viewpoints → catalog/viewpoints/unassigned/views}/multidimensional_layers_overview.sysml +1 -1
  82. package/examples/nested-architecture-dsm/README.md +49 -0
  83. package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +179 -0
  84. package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +165 -0
  85. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +53 -0
  86. package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +89 -0
  87. package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +113 -0
  88. package/examples/nested-architecture-dsm/model/catalog/project.sysml +28 -0
  89. package/examples/nested-architecture-dsm/model/catalog/traces.sysml +48 -0
  90. package/examples/reusable-instrument/model/catalog/project.sysml +24 -0
  91. package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +11 -8
  92. package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  93. package/examples/reusable-instrument/model/{viewpoints → catalog/viewpoints/unassigned/views}/reusable_instrument_overview.sysml +1 -1
  94. package/examples/ros-mobile-robot/README.md +40 -0
  95. package/examples/ros-mobile-robot/model/catalog/project.sysml +33 -0
  96. package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +296 -0
  97. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +7 -0
  98. package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +13 -0
  99. package/examples/software-only-medical-device/model/catalog/project.sysml +28 -0
  100. package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +11 -5
  101. package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  102. package/examples/software-only-medical-device/model/{viewpoints → catalog/viewpoints/unassigned/views}/software_only_medical_device_overview.sysml +1 -1
  103. package/examples/surgical-closure-workflow/model/catalog/project.sysml +24 -0
  104. package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +57 -57
  105. package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  106. package/examples/surgical-closure-workflow/model/{viewpoints → catalog/viewpoints/unassigned/views}/surgical_closure_workflow_overview.sysml +1 -1
  107. package/examples/surgical-robot/model/catalog/project.sysml +24 -0
  108. package/examples/surgical-robot/model/catalog/surgical_robot.sysml +6 -4
  109. package/examples/surgical-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  110. package/examples/surgical-robot/model/{viewpoints → catalog/viewpoints/unassigned/views}/surgical_robot_overview.sysml +1 -1
  111. package/examples/sysml-diagram-samples/README.md +7 -0
  112. package/examples/sysml-diagram-samples/dhf/documents/DOC-HAR-001.md +11 -0
  113. package/examples/sysml-diagram-samples/memo.package.yaml +11 -5
  114. package/examples/sysml-diagram-samples/model/catalog/project.sysml +33 -0
  115. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  116. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/action_flow_view.sysml +23 -20
  117. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/context_view.sysml +11 -11
  118. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +47 -0
  119. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +143 -0
  120. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +87 -0
  121. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +94 -0
  122. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +109 -0
  123. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +13 -0
  124. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/requirements_view.sysml +6 -7
  125. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +33 -0
  126. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +80 -0
  127. package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +48 -0
  128. package/examples/sysml-diagram-samples/model/{samples → catalog/viewpoints/unassigned/views}/use_case_view.sysml +15 -9
  129. package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +93 -0
  130. package/examples/temperature-alarm/model/catalog/project.sysml +24 -0
  131. package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +29 -21
  132. package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/viewpoint.sysml +9 -0
  133. package/examples/temperature-alarm/model/{viewpoints → catalog/viewpoints/unassigned/views}/temperature_alarm_overview.sysml +1 -1
  134. package/examples/ui-screen-regions/README.md +117 -0
  135. package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +84 -0
  136. package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +212 -0
  137. package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +61 -0
  138. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/drugSelectorRegion/drug-selector-expanded-2.4.1.png +0 -0
  139. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/mainScreenLayout/main-screen-2.4.1.png +0 -0
  140. package/examples/ui-screen-regions/model/catalog/artifacts/assets/screen-captures/settingsScreenLayout/settings-screen-2.4.1.png +0 -0
  141. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +51 -0
  142. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +27 -0
  143. package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +27 -0
  144. package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +59 -0
  145. package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +25 -0
  146. package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +178 -0
  147. package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +93 -0
  148. package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +75 -0
  149. package/examples/ui-screen-regions/model/catalog/project.sysml +45 -0
  150. package/examples/ui-screen-regions/model/catalog/relationships.sysml +8 -0
  151. package/examples/ui-screen-regions/model/catalog/traces.sysml +179 -0
  152. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/viewpoint.sysml +8 -0
  153. package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +62 -0
  154. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/viewpoint.sysml +8 -0
  155. package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +62 -0
  156. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/viewpoint.sysml +8 -0
  157. package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +62 -0
  158. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/viewpoint.sysml +8 -0
  159. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/main_screen_layout.sysml +57 -0
  160. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +52 -0
  161. package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +54 -0
  162. package/extensions/LICENSES/MIT.txt +19 -0
  163. package/extensions/README.md +94 -0
  164. package/extensions/aadl/memo.package.yaml +18 -0
  165. package/extensions/aadl/src/aadl_extension.sysml +6 -0
  166. package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +147 -0
  167. package/extensions/aadl/src/methodology/aadl_methodology.sysml +17 -0
  168. package/extensions/aadl/src/runtime/memo_aadl_runtime.sysml +56 -0
  169. package/extensions/clinical/memo.package.yaml +18 -0
  170. package/extensions/clinical/src/methodology/clinical_methodology.sysml +22 -0
  171. package/extensions/cloud/memo.package.yaml +18 -0
  172. package/extensions/cloud/src/cloud_extension.sysml +44 -0
  173. package/extensions/cloud/src/methodology/cloud_methodology.sysml +17 -0
  174. package/extensions/container/memo.package.yaml +18 -0
  175. package/extensions/container/src/container_extension.sysml +37 -0
  176. package/extensions/container/src/methodology/container_methodology.sysml +17 -0
  177. package/extensions/messaging/memo.package.yaml +18 -0
  178. package/extensions/messaging/src/messaging_extension.sysml +64 -0
  179. package/extensions/messaging/src/methodology/messaging_methodology.sysml +17 -0
  180. package/extensions/ros/memo.package.yaml +18 -0
  181. package/extensions/ros/src/methodology/ros_methodology.sysml +25 -0
  182. package/extensions/ros/src/ros_extension.sysml +200 -0
  183. package/extensions/template/memo.package.yaml +17 -0
  184. package/extensions/template/src/extension.sysml +37 -0
  185. package/memo.manifest.yaml +15 -2
  186. package/methodologies/default/memo.package.yaml +19 -9
  187. package/methodologies/gpca/memo.package.yaml +18 -9
  188. package/ontology/memo.package.yaml +23 -8
  189. package/package.json +6 -6
  190. package/profile/memo.package.yaml +18 -9
  191. package/src/architecture/decisions/memo_decisions.sysml +28 -0
  192. package/src/architecture/functional/behavior/memo_behavior.sysml +50 -22
  193. package/src/architecture/functional/constraints/memo_constraints.sysml +3 -2
  194. package/src/architecture/functional/functions/memo_functions.sysml +93 -43
  195. package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +46 -24
  196. package/src/architecture/implementation/software/structure/memo_software_structure.sysml +52 -12
  197. package/src/architecture/implementation/ui/memo_ui.sysml +276 -53
  198. package/src/architecture/logical/interfaces/memo_interfaces.sysml +64 -13
  199. package/src/architecture/logical/structure/memo_logical_structure.sysml +92 -35
  200. package/src/architecture/operational/activities/memo_activities.sysml +10 -4
  201. package/src/architecture/operational/context/actors/memo_actors.sysml +5 -8
  202. package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +13 -30
  203. package/src/architecture/operational/context/use_context/memo_use_context.sysml +42 -16
  204. package/src/architecture/operational/scenarios/memo_scenarios.sysml +57 -23
  205. package/src/architecture/operational/use_cases/memo_use_cases.sysml +35 -26
  206. package/src/architecture/operational/workflows/memo_workflows.sysml +28 -15
  207. package/src/architecture/realization/deployment/memo_deployment.sysml +111 -16
  208. package/src/architecture/realization/physical/memo_physical_architecture.sysml +27 -2
  209. package/src/artifacts/configuration_management/memo_configuration_management.sysml +35 -0
  210. package/src/artifacts/core/memo_controlled_artifacts.sysml +35 -0
  211. package/src/artifacts/documents/risk_management/memo_risk_management.sysml +12 -0
  212. package/src/artifacts/standards/cfr_21_820.sysml +116 -0
  213. package/src/artifacts/standards/fda_cybersecurity_2023.sysml +80 -0
  214. package/src/artifacts/standards/iec_60601_1.sysml +149 -0
  215. package/src/artifacts/standards/iec_60601_1_2.sysml +56 -0
  216. package/src/artifacts/standards/iec_60812.sysml +51 -0
  217. package/src/artifacts/standards/iec_62304.sysml +210 -0
  218. package/src/artifacts/standards/iec_62366_1.sysml +113 -0
  219. package/src/artifacts/standards/iec_81001_5_1.sysml +84 -0
  220. package/src/artifacts/standards/iso_13485.sysml +113 -0
  221. package/src/artifacts/standards/iso_14971.sysml +94 -0
  222. package/src/artifacts/standards/iso_iec_ieee_42010.sysml +42 -0
  223. package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +132 -0
  224. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-input.md +1 -1
  225. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-output.md +5 -5
  226. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-review.md +1 -1
  227. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-validation.md +2 -2
  228. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/design-verification.md +2 -2
  229. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/dhf-index.md +2 -2
  230. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/transfer-plan.md +1 -1
  231. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/user-needs.md +1 -1
  232. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-plan.md +3 -3
  233. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/vv-report.md +4 -4
  234. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/incident-response.md +1 -1
  235. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/postmarket-surveillance.md +3 -2
  236. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/security-arch.md +2 -2
  237. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/threat-model.md +4 -4
  238. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/fda-cybersecurity/vuln-assessment.md +4 -3
  239. package/src/artifacts/templates/dhf/iec-60601/hrs.md +170 -0
  240. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/detailed-design.md +1 -1
  241. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/integration-test.md +3 -3
  242. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sad.md +6 -5
  243. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sbom.md +3 -2
  244. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sdp.md +5 -4
  245. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/soup.md +4 -2
  246. package/src/artifacts/templates/dhf/iec-62304/srs.md +172 -0
  247. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/sw-traceability.md +3 -3
  248. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/system-test.md +1 -1
  249. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/summative-eval.md +1 -1
  250. package/src/artifacts/templates/dhf/iec-62366/task-analysis.md +93 -0
  251. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/ue-plan.md +1 -1
  252. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/urra.md +3 -3
  253. package/src/artifacts/templates/dhf/iso-14971/fmea.md +116 -0
  254. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/har.md +3 -3
  255. package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/rmp.md +2 -2
  256. package/src/artifacts/templates/dhf/system/sad.md +173 -0
  257. package/src/artifacts/templates/dhf/system/standards-checklist.md +87 -0
  258. package/src/artifacts/templates/dhf/system/standards-traceability.md +125 -0
  259. package/src/artifacts/templates/dhf/system/syrs.md +128 -0
  260. package/src/assurance/cybersecurity/memo_cybersecurity.sysml +39 -20
  261. package/src/assurance/human_factors/memo_human_factors.sysml +29 -22
  262. package/src/assurance/requirements/memo_requirements.sysml +5 -2
  263. package/src/assurance/requirements/needs/memo_needs.sysml +1 -1
  264. package/src/assurance/safety_risk/analysis/memo_fmea.sysml +118 -13
  265. package/src/assurance/safety_risk/memo_risk.sysml +78 -7
  266. package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +27 -0
  267. package/src/assurance/verification_validation/clinical_evaluation/memo_clinical_evaluation.sysml +11 -0
  268. package/src/assurance/verification_validation/memo_assurance.sysml +17 -21
  269. package/src/core/annotations/memo_annotations.sysml +96 -0
  270. package/src/core/common/memo_common.sysml +140 -18
  271. package/src/core/consistency_rules/consistency_rules.sysml +7 -0
  272. package/src/core/dimensions/dimensions.sysml +17 -1
  273. package/src/core/enumerations/memo_enumerations.sysml +101 -20
  274. package/src/core/methodology_scope/methodology_scope.sysml +7 -15
  275. package/src/core/relationships/memo_relationships.sysml +199 -194
  276. package/src/memo_namespaces.sysml +127 -67
  277. package/src/methodology/core/memo_core.sysml +69 -2
  278. package/src/methodology/profiles/memo_profiles.sysml +31 -41
  279. package/src/methodology/workflow/memo_workflow.sysml +7 -2
  280. package/src/rules/closure/closure_rules.sysml +104 -31
  281. package/src/rules/coverage/coverage_rules.sysml +4 -256
  282. package/src/rules/crosslayer/cross_layer_rules.sysml +6 -15
  283. package/src/rules/lifecycle/lifecycle_rules.sysml +4 -39
  284. package/src/rules/ontology/ontology_invariants.sysml +243 -74
  285. package/src/rules/quantitative/quantitative_rules.sysml +8 -8
  286. package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +10 -3
  287. package/src/viewpoints/clinical/clinical_viewpoint.sysml +4 -2
  288. package/src/viewpoints/clinical/{clinical_evidence_view → views/clinical_evidence_view}/clinical_evidence_view.sysml +2 -2
  289. package/src/viewpoints/context/context_viewpoint.sysml +4 -2
  290. package/src/viewpoints/context/{system_context_view → views/system_context_view}/system_context_view.sysml +2 -2
  291. package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -2
  292. package/src/viewpoints/cybersecurity/{cybersecurity_assessment_view → views/cybersecurity_assessment_view}/cybersecurity_assessment_view.sysml +2 -2
  293. package/src/viewpoints/cybersecurity/{threat_model_view → views/threat_model_view}/threat_model_view.sysml +2 -2
  294. package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +5 -0
  295. package/src/viewpoints/functional/functional_viewpoint.sysml +4 -2
  296. package/src/viewpoints/functional/{function_allocation_view → views/function_allocation_view}/function_allocation_view.sysml +3 -3
  297. package/src/viewpoints/functional/{system_functional_tree_view → views/system_functional_tree_view}/system_functional_tree_view.sysml +3 -3
  298. package/src/viewpoints/logical/logical_viewpoint.sysml +3 -1
  299. package/src/viewpoints/logical/{logical_architecture_view → views/logical_architecture_view}/logical_architecture_view.sysml +2 -2
  300. package/src/viewpoints/operational/operational_viewpoint.sysml +4 -2
  301. package/src/viewpoints/operational/{use_case_view → views/use_case_view}/use_case_view.sysml +3 -3
  302. package/src/viewpoints/physical/physical_viewpoint.sysml +3 -1
  303. package/src/viewpoints/physical/{network_topology_view → views/network_topology_view}/network_topology_view.sysml +2 -2
  304. package/src/viewpoints/physical/{physical_bom_view → views/physical_bom_view}/physical_bom_view.sysml +2 -2
  305. package/src/viewpoints/rendering/memo_rendering.sysml +354 -0
  306. package/src/viewpoints/requirements/requirements_viewpoint.sysml +3 -1
  307. package/src/viewpoints/requirements/{requirements_traceability_view → views/requirements_traceability_view}/requirements_traceability_view.sysml +2 -2
  308. package/src/viewpoints/risk/risk_viewpoint.sysml +3 -1
  309. package/src/viewpoints/risk/{risk_chain_view → views/risk_chain_view}/risk_chain_view.sysml +2 -2
  310. package/src/viewpoints/software/software_viewpoint.sysml +3 -1
  311. package/src/viewpoints/software/{software_architecture_view → views/software_architecture_view}/software_architecture_view.sysml +2 -2
  312. package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +28 -0
  313. package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +23 -0
  314. package/src/viewpoints/usability/usability_viewpoint.sysml +3 -1
  315. package/src/viewpoints/usability/{usability_engineering_view → views/usability_engineering_view}/usability_engineering_view.sysml +2 -2
  316. package/src/viewpoints/verification/verification_viewpoint.sysml +4 -2
  317. package/src/viewpoints/verification/{verification_coverage_view → views/verification_coverage_view}/verification_coverage_view.sysml +3 -3
  318. package/templates/connected-device/memo.package.yaml +11 -5
  319. package/templates/connected-device/model/catalog/project.sysml +28 -0
  320. package/templates/connected-device/syside.toml +1 -1
  321. package/templates/default/memo.package.yaml +11 -5
  322. package/templates/default/model/catalog/project.sysml +28 -0
  323. package/templates/default/syside.toml +1 -1
  324. package/templates/infusion-pump/memo.package.yaml +11 -5
  325. package/templates/infusion-pump/model/catalog/project.sysml +28 -0
  326. package/templates/infusion-pump/syside.toml +1 -1
  327. package/templates/monitoring-device/memo.package.yaml +11 -5
  328. package/templates/monitoring-device/model/catalog/project.sysml +28 -0
  329. package/templates/monitoring-device/syside.toml +1 -1
  330. package/templates/samd/memo.package.yaml +11 -5
  331. package/templates/samd/model/catalog/project.sysml +28 -0
  332. package/templates/samd/syside.toml +1 -1
  333. package/examples/connected-patient-monitor/model/connected_patient_monitor.sysml +0 -3
  334. package/examples/embedded-infusion-pump/model/embedded_infusion_pump.sysml +0 -3
  335. package/examples/extensions/README.md +0 -16
  336. package/examples/extensions/clinical/memo.package.yaml +0 -9
  337. package/examples/extensions/clinical/src/methodology/clinical_methodology.sysml +0 -14
  338. package/examples/extensions/template/memo.package.yaml +0 -9
  339. package/examples/extensions/template/src/extension.sysml +0 -15
  340. package/examples/functional-logical-physical/model/functional_logical_physical.sysml +0 -3
  341. package/examples/gpca-pump/memo.config.yaml +0 -9
  342. package/examples/gpca-pump/methodology/gpca_scope.sysml +0 -25
  343. package/examples/ivd-laboratory-system/model/ivd_laboratory_system.sysml +0 -3
  344. package/examples/manual-surgical-instrument/model/manual_surgical_instrument.sysml +0 -3
  345. package/examples/multidimensional-layers/model/multidimensional_layers.sysml +0 -4
  346. package/examples/reusable-instrument/model/reusable_instrument.sysml +0 -4
  347. package/examples/software-only-medical-device/model/software_only_medical_device.sysml +0 -4
  348. package/examples/surgical-closure-workflow/model/surgical_closure_workflow.sysml +0 -4
  349. package/examples/surgical-robot/model/surgical_robot.sysml +0 -4
  350. package/examples/sysml-diagram-samples/model/samples/functional_flow_view.sysml +0 -164
  351. package/examples/sysml-diagram-samples/model/samples/interconnection_view.sysml +0 -94
  352. package/examples/sysml-diagram-samples/model/samples/operational_behaviour_view.sysml +0 -135
  353. package/examples/sysml-diagram-samples/model/samples/state_transition_view.sysml +0 -109
  354. package/examples/sysml-diagram-samples/model/samples/tree_view.sysml +0 -56
  355. package/examples/temperature-alarm/model/temperature_alarm.sysml +0 -4
  356. package/ontology/memo.rendering.yaml +0 -84
  357. package/src/compliance/artifacts/memo_artifacts.sysml +0 -12
  358. package/src/compliance/change/memo_change.sysml +0 -17
  359. package/src/compliance/dhf-templates/iec-62304/srs.md +0 -138
  360. package/src/compliance/dhf-templates/iec-62366/task-analysis.md +0 -57
  361. package/src/compliance/dhf-templates/iso-14971/fmea.md +0 -93
  362. package/src/compliance/document_views/memo_document_views.sysml +0 -7
  363. package/src/compliance/iso14971/risk_management_file.sysml +0 -16
  364. package/src/compliance/postmarket/memo_postmarket.sysml +0 -16
  365. /package/{examples/extensions → extensions}/clinical/src/clinical_extension.sysml +0 -0
  366. /package/{examples/extensions → extensions}/clinical/src/procedures/memo_clinical_procedures.sysml +0 -0
  367. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/21cfr820/change-record.md +0 -0
  368. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62304/change-control.md +0 -0
  369. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/formative-eval.md +0 -0
  370. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/ui-spec.md +0 -0
  371. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iec-62366/use-spec.md +0 -0
  372. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/fta.md +0 -0
  373. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/risk-benefit.md +0 -0
  374. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/risk-matrix.md +0 -0
  375. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/iso-14971/rmr.md +0 -0
  376. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/approval-block.md +0 -0
  377. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/document-control-header.md +0 -0
  378. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/references-section.md +0 -0
  379. /package/src/{compliance/dhf-templates → artifacts/templates/dhf}/shared/snippets/revision-history-table.md +0 -0
  380. /package/templates/connected-device/{src → model/catalog}/architecture/system.sysml +0 -0
  381. /package/templates/connected-device/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  382. /package/templates/connected-device/{src → model/catalog}/assurance/requirements.sysml +0 -0
  383. /package/templates/default/{src → model/catalog}/architecture/system.sysml +0 -0
  384. /package/templates/default/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  385. /package/templates/default/{src → model/catalog}/assurance/requirements.sysml +0 -0
  386. /package/templates/infusion-pump/{src → model/catalog}/architecture/system.sysml +0 -0
  387. /package/templates/infusion-pump/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  388. /package/templates/infusion-pump/{src → model/catalog}/assurance/requirements.sysml +0 -0
  389. /package/templates/monitoring-device/{src → model/catalog}/architecture/system.sysml +0 -0
  390. /package/templates/monitoring-device/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  391. /package/templates/monitoring-device/{src → model/catalog}/assurance/requirements.sysml +0 -0
  392. /package/templates/samd/{src → model/catalog}/architecture/system.sysml +0 -0
  393. /package/templates/samd/{src/artifacts/artifacts.sysml → model/catalog/artifacts/catalog.sysml} +0 -0
  394. /package/templates/samd/{src → model/catalog}/assurance/requirements.sysml +0 -0
@@ -5,31 +5,92 @@
5
5
  // UI is an implementation concern (rendered UI is software; physical controls
6
6
  // are hardware), so it lives in the implementation layer, not operational.
7
7
  package memo_architecture_implementation_ui {
8
+ private import Metaobjects::SemanticMetadata;
8
9
  private import ScalarValues::*;
9
10
 
10
11
  private import memo_core_common::*;
11
12
  private import memo_core_enumerations::*;
13
+ private import memo_assurance_safety_risk::*; // RiskControlMeasure
12
14
  private import memo_core_relationships::*;
13
15
  private import memo_architecture_operational_activities::*;
14
16
  private import memo_architecture_operational_scenarios::*;
15
17
  private import memo_architecture_operational_use_cases::*;
16
18
  private import memo_architecture_functional_functions::*;
19
+ private import memo_architecture_implementation_software_structure::*;
20
+ private import memo_architecture_implementation_hardware_common::*;
17
21
  private import memo_assurance_human_factors::*;
18
22
 
23
+ // Every concrete UI form, holding and held alike. A screen is not a
24
+ // different KIND of thing from a button — it is a UIElement that happens to
25
+ // contain others, exactly as an assembly is a part that contains parts.
26
+ // The forms below are classifications, not classes, so one tree carries the
27
+ // whole interface.
19
28
  enum def UIElementFormKind {
29
+ // ── forms that hold other elements ──
30
+ enum screen;
31
+ enum dialog;
32
+ enum panel;
33
+ enum menu;
34
+ enum tab;
35
+ enum drawer;
36
+ enum wizardStep;
37
+ // ── controls the user acts on ──
38
+ // Rendered controls only. A knob, toggle, lamp, or buzzer the user
39
+ // touches is not software: it is an OperatorInterfaceElement below.
20
40
  enum button;
21
41
  enum field;
22
42
  enum selector;
23
- enum knob;
24
- enum switchControl;
25
43
  enum slider;
44
+ // ── forms that present information ──
26
45
  enum table;
27
46
  enum chart;
28
47
  enum icon;
29
- enum indicatorLamp;
30
- enum audibleIndicator;
31
- enum hapticIndicator;
32
48
  enum textMessage;
49
+ // ── chrome ──
50
+ // Non-functional: a rule, a background, a brand mark. Declared, never
51
+ // merely implied — CR-MED-110 exempts `decoration` from needing a
52
+ // design record, so an element left unclassified fails rather than
53
+ // slipping through as scenery.
54
+ enum decoration;
55
+ }
56
+
57
+ // ─── Screen geometry ─────────────────────────────────────────
58
+ // Position and size of a UIElement inside its PARENT element, each value
59
+ // normalized to 0..1 of the parent's box — not pixels. Two consequences
60
+ // are wanted: an element survives a re-capture at a different resolution
61
+ // or device scale, and a child's box is stated against its parent, which
62
+ // is exactly what the containment tree already asserts. Absolute pixels
63
+ // stay recoverable from the ScreenCapture's pixelWidth / pixelHeight.
64
+ attribute def RegionBounds {
65
+ attribute x : Real;
66
+ attribute y : Real;
67
+ attribute width : Real;
68
+ attribute height : Real;
69
+ }
70
+
71
+ // How an element appears relative to its parent and siblings. It records
72
+ // design intent a bare rectangle cannot: an element whose box escapes its
73
+ // parent and covers its siblings is a defect if it is `inline` and correct
74
+ // if it is `overlay`, and the geometry alone does not say which. A
75
+ // renderer reads it to decide what to clip and what to draw on top; a
76
+ // reviewer reads it to know whether an overlap is intended.
77
+ enum def UIDisclosureKind {
78
+ enum inline; // laid out inside the parent, sharing space with siblings
79
+ enum overlay; // dropdown, popover, modal — drawn OVER parent and siblings
80
+ enum transient; // tooltip, toast — appears over everything, then withdraws
81
+ enum scrolled; // inside the parent, but beyond its viewport until scrolled
82
+ enum conditional; // rendered only while a stated condition holds
83
+ }
84
+
85
+ // How the element's bounds were obtained. Automatic boundary detection
86
+ // PROPOSES; a reviewer DISPOSES. In a regulated review the reader must be
87
+ // able to see which boxes a human confirmed and which the tool guessed, so
88
+ // that provenance is model content and not a workbench-only flag.
89
+ enum def BoundsDetectionKind {
90
+ enum manual;
91
+ enum automatic;
92
+ enum automaticConfirmed;
93
+ enum imported;
33
94
  }
34
95
 
35
96
  // The interaction intents a step or action can carry (§18).
@@ -54,20 +115,73 @@ package memo_architecture_implementation_ui {
54
115
  attribute uiTechnology : String;
55
116
  }
56
117
 
57
- part def UIContainer specializes ArchitectureElement {
58
- attribute containerKind : String;
59
- attribute navigationRole : String;
118
+ // What a rendered control and a physical one genuinely share: a label, an
119
+ // accessibility story, and — when they annunciate — an alarm character.
120
+ // The base exists so that the §18 traceability relations can type against
121
+ // "something the user interacts with" rather than against software
122
+ // specifically. Without it a use error on a knob would be unmodellable,
123
+ // because ErrorAtElement would only accept a UIElement.
124
+ abstract part def InteractionElement specializes ArchitectureElement {
125
+ attribute labelText : String;
126
+ attribute accessibilitySummary : String;
127
+ // alarm annunciation (optional; IEC 60601-1-8)
128
+ attribute alarmPriority : NotificationPriorityKind[0..1];
129
+ attribute annunciationModality : String;
130
+ attribute silenceable : Boolean;
60
131
  }
61
132
 
62
- // One UIElement. The widget form — screen (field/table/chart) or physical
63
- // (knob/switch/indicatorLamp/haptic) — is the `formKind` enum, not a
64
- // subclass. Input/output/navigation/alarm/display/physical-control
65
- // descriptors are optional attributes; a physical control's mechanical
66
- // realization is a hardware part linked by ControlImplementedBy.
67
- part def UIElement specializes ArchitectureElement {
133
+
134
+ // One UIElement — the single UI part type. The widget form — holding
135
+ // (screen/panel/dialog), acting (button/knob/slider), presenting
136
+ // (field/table/chart), physical (knob/switch/indicatorLamp/haptic), or
137
+ // decorative — is the `formKind` enum, not a subclass.
138
+ // Input/output/navigation/alarm/display/physical-control descriptors are
139
+ // optional attributes; a physical control's mechanical realization is a
140
+ // hardware part linked by ControlImplementedBy.
141
+ //
142
+ // Composition is the ordinary `Composes` relation, so a screen's element
143
+ // tree is an ordinary part tree: CR-ONT-001 already forbids cycles in it,
144
+ // impact analysis already walks it, and requirements, functions, use
145
+ // errors, and risk controls already trace to it. Screen layout adds four
146
+ // numbers to that tree — it does not add a tree.
147
+ //
148
+ // A UIElement IS a structural SOFTWARE ITEM (IEC 62304 §3.25) and
149
+ // specializes SoftwareElement, inheriting safetyClass and complexity, so the
150
+ // interface is classified and decomposed like the software it is.
151
+ //
152
+ // It specializes SoftwareElement and NOT SoftwareModule: the module view is
153
+ // CODE, and a screen is not a source module. Runtime processes are
154
+ // SoftwareComponent, code is SoftwareModule, and the UI is a third view of
155
+ // the same software — a sibling of those, not a kind of either.
156
+ part def UIElement specializes SoftwareElement, InteractionElement {
68
157
  attribute formKind : UIElementFormKind;
69
- attribute labelText : String;
70
- attribute accessibilitySummary : String;
158
+ // ── screen layout (optional; set for elements that are laid out) ──
159
+ // Bounds are relative to the parent element in the Composes tree; a
160
+ // root screen's bounds are the full frame.
161
+ attribute bounds : RegionBounds[0..1];
162
+ attribute disclosureKind : UIDisclosureKind[0..1];
163
+ // The condition under which the element renders; meaningful when
164
+ // disclosureKind is `conditional`.
165
+ attribute visibilityCondition : String;
166
+ // Boundary colour as a CSS colour token. Presentation, but modelled: a
167
+ // review print, an exported figure, and the workbench must agree on
168
+ // which box is which, and a colour assigned only in a tool session does
169
+ // not survive the export.
170
+ attribute boundaryColor : String;
171
+ // Capture-relative fill transparency for region review overlays. A
172
+ // modelled value keeps interactive review and exported figures aligned.
173
+ attribute boundaryOpacity : Real[0..1];
174
+ // Stroke width of the same box, in pixels. Colour and opacity are
175
+ // modelled so a review print, an exported figure, and the workbench
176
+ // agree on which box is which; a width chosen per renderer breaks that
177
+ // agreement for exactly the same reason.
178
+ attribute boundaryWidth : Real[0..1];
179
+ attribute detectionMethod : BoundsDetectionKind[0..1];
180
+ attribute detectionConfidence : Real[0..1];
181
+ attribute confirmedBy : String;
182
+ attribute confirmedAt : String;
183
+ // ── role of a holding form (optional) ──
184
+ attribute navigationRole : String;
71
185
  // input descriptors (optional)
72
186
  attribute inputConstraints : String;
73
187
  attribute defaultValue : String;
@@ -75,15 +189,72 @@ package memo_architecture_implementation_ui {
75
189
  attribute updateRate : String;
76
190
  attribute unitsDisplayed : String;
77
191
  attribute informationContent : String;
78
- // navigation (optional)
79
- attribute navigationTarget : String;
80
- // alarm annunciation (optional)
81
- attribute alarmPriority : NotificationPriorityKind[0..1];
82
- attribute annunciationModality : String;
83
- attribute silenceable : Boolean;
84
- // physical control (optional)
192
+ }
193
+
194
+ // ─── Physical operator interface ─────────────────────────────
195
+ // The hardware the user actually touches and reads. IEC 60601-1 marks
196
+ // "controls and instruments" and defines OPERATOR; this is that surface,
197
+ // covering both directions — what the operator actuates and what the
198
+ // device shows back — because a front panel is one interface, not two.
199
+ //
200
+ // It is a PhysicalComponent, so it inherits part number, material, and the
201
+ // ISO 10993-1 patient-contact characterization that a touched surface
202
+ // needs and that software can never have. That inheritance is the reason
203
+ // these forms had to leave UIElement: as UIElementFormKind members they
204
+ // were software items with no way to state any of it.
205
+ enum def OperatorInterfaceFormKind {
206
+ // ── actuated by the operator ──
207
+ enum knob;
208
+ enum dial;
209
+ enum pushButton;
210
+ enum toggleSwitch;
211
+ enum rockerSwitch;
212
+ enum lever;
213
+ enum physicalSlider;
214
+ enum keypad;
215
+ enum footPedal;
216
+ enum touchSurface;
217
+ // ── presented to the operator ──
218
+ enum indicatorLamp;
219
+ enum gauge;
220
+ enum audibleIndicator;
221
+ enum hapticIndicator;
222
+ enum printedMarking;
223
+ }
224
+
225
+ part def OperatorInterfaceElement specializes PhysicalComponent, InteractionElement {
226
+ attribute formKind : OperatorInterfaceFormKind;
227
+ // actuation (optional; set for actuated forms)
85
228
  attribute actuationForce : String;
229
+ attribute actuationTravel : String;
86
230
  attribute guardedAgainstInadvertentActuation : Boolean;
231
+ attribute tactileFeedback : String;
232
+ // presentation (optional; set for presented forms)
233
+ attribute legendText : String;
234
+ attribute luminanceOrVolume : String;
235
+ }
236
+
237
+ // ─── Captured evidence ───────────────────────────────────────
238
+ // One image of one screen. MemoEvidence, not ArchitectureElement: it
239
+ // records what a specific build actually displayed at a specific time,
240
+ // which is the provenance a design review or a usability engineering file
241
+ // needs before it can rely on the picture. The screen it depicts is an
242
+ // ordinary UIElement with formKind = screen.
243
+ part def ScreenCapture specializes MemoEvidence {
244
+ attribute imageUri : String;
245
+ // Content hash of the image bytes. The screenshot is the evidence, so
246
+ // it must be tamper-evident: a DHF reference to a mutable file is not
247
+ // a reference to anything.
248
+ attribute imageHash : String;
249
+ attribute pixelWidth : Integer;
250
+ attribute pixelHeight : Integer;
251
+ attribute captureDate : String;
252
+ // Which build produced this rendering. A screenshot without a build is
253
+ // undated design intent, not evidence of the device.
254
+ attribute capturedBuild : String;
255
+ // Device, viewport, locale, theme, user role — everything that changes
256
+ // what the screen shows without changing the software.
257
+ attribute captureContext : String;
87
258
  }
88
259
 
89
260
  // UI state is presentation state — distinct from system/device state.
@@ -103,57 +274,109 @@ package memo_architecture_implementation_ui {
103
274
  }
104
275
 
105
276
  // A reusable dialogue structure through the UI; a selected path through
106
- // it is an UIScenario.
277
+ // it is a MemoScenario with scenarioKind `ui`.
107
278
  action def InteractionFlow specializes MemoAction {
108
279
  attribute entryPoint : String;
109
280
  attribute exitPoint : String;
110
281
  }
111
282
 
112
- part def UIScenario specializes MemoScenario {
113
- ref parentFlow : InteractionFlow[0..1];
114
- }
115
-
116
- connection def UITransition :> MemoRelationship {
117
- attribute triggeringEvent : String;
118
- attribute guardCondition : String;
119
- end sourceState : UIState;
120
- end targetState : UIState;
121
- }
122
283
  connection def DataBinding :> MemoRelationship {
123
284
  attribute bindingExpression : String;
124
285
  attribute refreshPolicy : String;
125
- end boundElement : UIElement;
126
- end dataSource : MemoPart;
286
+ end boundElement : InteractionElement :>> source;
287
+ end dataSource : MemoItem :>> target;
288
+ }
289
+ abstract connection dataBindingLinks : DataBinding[*];
290
+ metadata def <dataBinding> DataBindingMetadata :> SemanticMetadata {
291
+ :> annotatedElement : SysML::ConnectionDefinition;
292
+ :> annotatedElement : SysML::ConnectionUsage;
293
+ :>> baseType = dataBindingLinks meta SysML::Usage;
127
294
  }
128
- connection def PresentsState :> MemoRelationship {
129
- end userInterface : UserInterface;
130
- end uiState : UIState;
295
+ // `PresentsState` had zero usages anywhere in the tree (R10-S6). Its
296
+ // audited native form, `exhibit state`, does not actually fit: `UIState`
297
+ // is a `part def` with plain string attributes, not a `state def`, and
298
+ // SysIDE rejects `exhibit` referencing anything that does not conform to
299
+ // `States::StateAction` ("An exhibit state must reference another
300
+ // state"). Free deletion rather than a migration — nothing referenced
301
+ // it, so nothing to preserve. If `UIState` is ever restructured onto a
302
+ // real state machine, `exhibit state` becomes available then.
303
+
304
+ // ── Screen layout relations ──────────────────────────────────
305
+ // Which modelled screen an image is a rendering of.
306
+ connection def CapturesScreen :> MemoRelationship {
307
+ end capture : ScreenCapture :>> source;
308
+ end screen : UIElement :>> target;
309
+ }
310
+ abstract connection capturesScreenLinks : CapturesScreen[*];
311
+ metadata def <capturesScreen> CapturesScreenMetadata :> SemanticMetadata {
312
+ :> annotatedElement : SysML::ConnectionDefinition;
313
+ :> annotatedElement : SysML::ConnectionUsage;
314
+ :>> baseType = capturesScreenLinks meta SysML::Usage;
315
+ }
316
+
317
+ // Activating this element opens another screen. This is NAVIGATION, not
318
+ // containment — the opened screen is not laid out inside the element, so
319
+ // it is not a Composes child and the geometric rules do not relate them.
320
+ // Conflating the two was the mistake that made "clicking takes you to a
321
+ // child view" look like spatial nesting; it is a separate frame reached
322
+ // from here, and only this relation says so.
323
+ connection def NavigatesTo :> MemoRelationship {
324
+ attribute triggerGesture : String;
325
+ end sourceElement : UIElement :>> source;
326
+ end targetScreen : UIElement :>> target;
327
+ }
328
+ abstract connection navigatesToLinks : NavigatesTo[*];
329
+ metadata def <navigatesTo> NavigatesToMetadata :> SemanticMetadata {
330
+ :> annotatedElement : SysML::ConnectionDefinition;
331
+ :> annotatedElement : SysML::ConnectionUsage;
332
+ :>> baseType = navigatesToLinks meta SysML::Usage;
131
333
  }
132
334
 
133
335
  // ── §18 traceability ─────────────────────────────────────────
134
336
  connection def ElementTriggersAction :> MemoRelationship {
135
- end element : UIElement;
136
- end triggeredAction : UIAction;
337
+ end element : InteractionElement :>> source;
338
+ end triggeredAction : UIAction :>> target;
137
339
  }
138
- connection def ActionInvokesFunction :> MemoRelationship {
139
- end uiAction : UIAction;
140
- end systemFunction : SystemFunction;
340
+ abstract connection elementTriggersActionLinks : ElementTriggersAction[*];
341
+ metadata def <elementTriggersAction> ElementTriggersActionMetadata :> SemanticMetadata {
342
+ :> annotatedElement : SysML::ConnectionDefinition;
343
+ :> annotatedElement : SysML::ConnectionUsage;
344
+ :>> baseType = elementTriggersActionLinks meta SysML::Usage;
141
345
  }
346
+ // `ActionInvokesFunction` is native `perform` (R10-S6): write
347
+ // `perform <systemFunction>;` inside the `UIAction` usage instead.
142
348
  connection def FlowServesUseCase :> MemoRelationship {
143
- end interactionFlow : InteractionFlow;
144
- end useCase : UseCase;
349
+ end interactionFlow : InteractionFlow :>> source;
350
+ end useCase : UseCase :>> target;
351
+ }
352
+ abstract connection flowServesUseCaseLinks : FlowServesUseCase[*];
353
+ metadata def <flowServesUseCase> FlowServesUseCaseMetadata :> SemanticMetadata {
354
+ :> annotatedElement : SysML::ConnectionDefinition;
355
+ :> annotatedElement : SysML::ConnectionUsage;
356
+ :>> baseType = flowServesUseCaseLinks meta SysML::Usage;
145
357
  }
146
- // The UI-layer scenario realizes exactly one FunctionalScenario one layer
147
- // up (the interaction sequence that carries out the function sequence),
148
- // completing the OperativeScenario → FunctionalScenario → UIScenario chain.
358
+ // A UI scenario realizes a functional scenario one layer up: each is a
359
+ // MemoScenario selected by scenarioKind rather than a separate definition.
149
360
  connection def ErrorAtElement :> MemoRelationship {
150
- end useError : UseError;
151
- end element : UIElement;
361
+ end useError : UseError :>> source;
362
+ end element : InteractionElement :>> target;
363
+ }
364
+ abstract connection errorAtElementLinks : ErrorAtElement[*];
365
+ metadata def <errorAtElement> ErrorAtElementMetadata :> SemanticMetadata {
366
+ :> annotatedElement : SysML::ConnectionDefinition;
367
+ :> annotatedElement : SysML::ConnectionUsage;
368
+ :>> baseType = errorAtElementLinks meta SysML::Usage;
152
369
  }
153
370
  // A risk control implemented by a UI element or by task design
154
371
  // (confirmation dialog, lockout, guarded control).
155
372
  connection def ControlImplementedBy :> MemoRelationship {
156
- end riskControl : VerifiableElement;
157
- end implementingElement : ArchitectureElement;
373
+ end riskControl : RiskControlMeasure :>> source;
374
+ end implementingElement : ArchitectureElement :>> target;
375
+ }
376
+ abstract connection controlImplementedByLinks : ControlImplementedBy[*];
377
+ metadata def <controlImplementedBy> ControlImplementedByMetadata :> SemanticMetadata {
378
+ :> annotatedElement : SysML::ConnectionDefinition;
379
+ :> annotatedElement : SysML::ConnectionUsage;
380
+ :>> baseType = controlImplementedByLinks meta SysML::Usage;
158
381
  }
159
382
  }
@@ -44,12 +44,24 @@ package memo_architecture_logical_interfaces {
44
44
  attribute apiStyle : String;
45
45
  }
46
46
 
47
+ // Software interaction contracts specialize the native MEMO interface
48
+ // family. Concrete technologies add their protocol roles and message
49
+ // flows; ports remain the endpoints that components actually own.
50
+ abstract interface def SoftwareInterface specializes Interface {
51
+ // `default`, not `=`. A bare `=` in a definition BINDS the value, and
52
+ // a binding cannot be overridden by a usage — which asserted that
53
+ // every software interface is bidirectional and made a directional one
54
+ // inexpressible. A ROS topic publisher → subscriber is the obvious
55
+ // counterexample, and it is the common case rather than an exotic one.
56
+ attribute :>> direction default DirectionKind::inputOutput;
57
+ }
58
+
47
59
  // A typed thing exchanged at a boundary. Concrete items such as
48
60
  // AlarmSignal and FlowCommand specialize this type; they are neither
49
61
  // functions nor generic action-flow notation.
50
62
  // The kind of item is given by itemKind (data / command / signal / …);
51
63
  // the control-specific fields below apply only when itemKind = command.
52
- item def InterfaceItem specializes MemoExchangeItem {
64
+ item def InterfaceItem specializes MemoItem {
53
65
  attribute itemKind : InterfaceItemKind;
54
66
  attribute confidentialityClass : String;
55
67
  attribute integrityClass : String;
@@ -67,8 +79,7 @@ package memo_architecture_logical_interfaces {
67
79
  attribute interfaceKind : InterfaceKind;
68
80
  attribute protocolSemantics : String;
69
81
  }
70
- port def DataPort {
71
- attribute direction : DirectionKind;
82
+ port def DataPort specializes MemoPort {
72
83
  attribute interfaceType : String;
73
84
  }
74
85
  port def SensorPort specializes DataPort { attribute sensorDomain : String; }
@@ -76,14 +87,45 @@ package memo_architecture_logical_interfaces {
76
87
 
77
88
  part def ComponentExchange specializes ArchitectureElement {
78
89
  attribute exchangeKind : FlowKind;
79
- // Typed endpoints (CR-ONT-002). A component or a boundary port may
80
- // terminate an exchange, so the ends are MemoPart-typed.
81
- ref sourceEndpoint : MemoPart[0..1];
82
- ref targetEndpoint : MemoPart[0..1];
83
- // Descriptive port paths (e.g. "TLM.TLM_MODE_OUT") for AADL
84
- // round-trips; labels only — never references.
85
- attribute sourcePortPath : String;
86
- attribute targetPortPath : String;
90
+ // Metaclass-neutral endpoints. CR-ONT-002 used to read: "Typed
91
+ // endpoints. A component or a boundary port may terminate an exchange,
92
+ // so the ends are MemoPart-typed." That reasoning was circular —
93
+ // PhysicalPort and SoftwarePort are part defs precisely SO THAT they
94
+ // could satisfy this typing, and the typing was justified by their
95
+ // being parts. Track A0 cut the circle at the ends, which is the side
96
+ // that has to move first: A1 turns those two into `port def`s, and a
97
+ // port cannot specialize a part-based type.
98
+ //
99
+ // The constraint the type was carrying — an endpoint is a component or
100
+ // a boundary port, never a requirement or a document — is now stated
101
+ // where it can be checked across metaclasses, as CR-ONT-072/073 in
102
+ // src/rules/ontology/ontology_invariants.sysml.
103
+ //
104
+ // `Base::Anything` rather than no type at all — the only place in this
105
+ // change that reaches for it. The 36 untyped ends in
106
+ // memo_core_relationships are `end` declarations, and an untyped `end`
107
+ // is established practice; an untyped `ref` with a multiplicity is not
108
+ // something MEMO's own grammar accepts (`Expecting token of type ';'
109
+ // but found '['`), and the grammar is not in this session's scope.
110
+ // `Base::Anything` is what the standard's `Allocations::Allocation`
111
+ // types its own ends with, so it is the conforming spelling of "any
112
+ // element", not a workaround.
113
+ ref sourceEndpoint : Base::Anything[0..1];
114
+ ref targetEndpoint : Base::Anything[0..1];
115
+ // `sourcePortPath` / `targetPortPath` are GONE. They were String
116
+ // "descriptive port paths (e.g. TLM.TLM_MODE_OUT) for AADL round-trips;
117
+ // labels only — never references", which is §13.3's string
118
+ // pseudo-reference: nothing can follow a string to an element, so
119
+ // anything built on them produced no traceability.
120
+ //
121
+ // Measured across the 92 sites in the GPCA example before removing
122
+ // them: 23 merely restated the endpoint the ref already named (15 gave
123
+ // the port's own display name, 8 were prose like "HW-001:
124
+ // GPCA_HW_Sensors"), and the other 69 named a port ON the endpoint
125
+ // component, resolving to 49 distinct AADL features. Those 49 are
126
+ // declared as real ports now and the endpoint refs point straight at
127
+ // them, which is what Track A1 making SoftwarePort a `port def` is for.
128
+ // The AADL round-trip is better served by an element than by its name.
87
129
  ref allocatedExchanges : FunctionalExchange[0..*];
88
130
  attribute direction : DirectionKind;
89
131
  // Connection timing discipline from the source architecture
@@ -94,9 +136,18 @@ package memo_architecture_logical_interfaces {
94
136
  // Boundary data port of a software system (e.g. an AADL top-level
95
137
  // data port), modeled as a first-class element so exchanges can
96
138
  // reference it and views can render the system boundary.
97
- part def SoftwarePort specializes InterfaceElement {
139
+ //
140
+ // A `port def` (Track A1) — see PhysicalPort in
141
+ // memo_architecture_realization_physical for why the specialization moved
142
+ // off InterfaceElement, why `direction` is native now (Track A2), and why
143
+ // `portKind` is duplicated on both ports instead of hoisted onto a base.
144
+ port def SoftwarePort specializes MemoPort {
98
145
  attribute portKind : InterfaceKind;
99
- attribute direction : DirectionKind;
146
+ // AADL port category (plan C2). Sampled vs. queued delivery decides
147
+ // whether a missed deadline drops a sample or grows a queue, which the
148
+ // timing analysis and the safety case both need and neither could ask
149
+ // the model for. `portKind` says what crosses; this says how.
150
+ attribute portCategory : PortCategoryKind;
100
151
  attribute dataTypeName : String;
101
152
  }
102
153
  }