@memoarchitect/ontology 0.13.2 → 0.15.1
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.
- package/README.md +5 -3
- package/examples/connected-patient-monitor/memo.identity.yaml +34 -0
- package/examples/connected-patient-monitor/memo.package.yaml +3 -1
- package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +17 -12
- package/examples/connected-patient-monitor/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/embedded-infusion-pump/memo.package.yaml +3 -1
- package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +6 -6
- package/examples/embedded-infusion-pump/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/functional-logical-physical/memo.identity.yaml +28 -0
- package/examples/functional-logical-physical/memo.package.yaml +3 -1
- package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +5 -5
- package/examples/functional-logical-physical/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/gpca-pump/analysis/Samples/01-model-overview.ipynb +40 -139
- package/examples/gpca-pump/analysis/Samples/02-architecture-hotspots.ipynb +38 -290
- package/examples/gpca-pump/analysis/Samples/03-model-quality.ipynb +47 -217
- package/examples/gpca-pump/analysis/Samples/04-change-impact-explorer.ipynb +50 -191
- package/examples/gpca-pump/analysis/Samples/05-model-charts.ipynb +42 -181
- package/examples/gpca-pump/analysis/Samples/06-ownership-graph.ipynb +40 -164
- package/examples/gpca-pump/analysis/Samples/07-model-inventory-table.ipynb +51 -172
- package/examples/gpca-pump/analysis/Samples/README.md +15 -9
- package/examples/gpca-pump/analysis/memo_model.py +243 -0
- package/examples/gpca-pump/memo.identity.yaml +521 -26
- package/examples/gpca-pump/memo.package.yaml +3 -1
- package/examples/gpca-pump/methodology/gpca_profiles.sysml +56 -47
- package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +51 -78
- package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +359 -357
- package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +9 -9
- package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +56 -69
- package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +44 -59
- package/examples/gpca-pump/model/catalog/gpca_context.sysml +23 -35
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +33 -40
- package/examples/gpca-pump/model/catalog/gpca_formal_behavior.sysml +62 -63
- package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +362 -483
- package/examples/gpca-pump/model/catalog/gpca_operational.sysml +45 -70
- package/examples/gpca-pump/model/catalog/gpca_physical.sysml +6 -12
- package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +173 -169
- package/examples/gpca-pump/model/catalog/gpca_risk.sysml +139 -225
- package/examples/gpca-pump/model/catalog/gpca_standards.sysml +43 -47
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +68 -65
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +147 -116
- package/examples/gpca-pump/model/catalog/gpca_verification.sysml +65 -90
- package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +7 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_device_interconnect_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_logical_architecture_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_fmea_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/risk_risk_chain_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/software_software_architecture_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/usability/views/document_usability_view.sysml +4 -6
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +3 -5
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +2 -4
- package/examples/gpca-pump/model/{catalog → methodology}/project.sysml +8 -6
- package/examples/ivd-laboratory-system/memo.package.yaml +3 -1
- package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +12 -9
- package/examples/ivd-laboratory-system/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/manual-surgical-instrument/memo.package.yaml +3 -1
- package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +2 -6
- package/examples/manual-surgical-instrument/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/multidimensional-layers/memo.package.yaml +3 -1
- package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +2 -4
- package/examples/multidimensional-layers/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/nested-architecture-dsm/memo.identity.yaml +93 -0
- package/examples/nested-architecture-dsm/memo.package.yaml +3 -1
- package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +30 -30
- package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +28 -28
- package/examples/nested-architecture-dsm/model/catalog/architecture/operational/context.sysml +2 -4
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/needs.sysml +4 -4
- package/examples/nested-architecture-dsm/model/catalog/assurance/requirements/requirements.sysml +7 -7
- package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +8 -8
- package/examples/nested-architecture-dsm/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/reusable-instrument/memo.package.yaml +3 -1
- package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +7 -7
- package/examples/reusable-instrument/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/robot-cell-family/README.md +34 -0
- package/examples/robot-cell-family/memo.identity.yaml +142 -0
- package/examples/robot-cell-family/memo.package.yaml +7 -0
- package/examples/robot-cell-family/model/methodology/project.sysml +30 -0
- package/examples/robot-cell-family/model/shared/shared.sysml +53 -0
- package/examples/robot-cell-family/model/sos/chains.sysml +36 -0
- package/examples/robot-cell-family/model/sos/icds.sysml +29 -0
- package/examples/robot-cell-family/model/sos/sos.sysml +31 -0
- package/examples/robot-cell-family/model/sos/use_cases.sysml +25 -0
- package/examples/robot-cell-family/model/systems/manipulation/manipulation_system.sysml +35 -0
- package/examples/robot-cell-family/model/systems/navigation/navigation_system.sysml +46 -0
- package/examples/robot-cell-family/model/systems/perception/perception_system.sysml +37 -0
- package/examples/robot-platform/memo.package.yaml +3 -0
- package/examples/robot-platform/model/platform.sysml +15 -0
- package/examples/ros-mobile-robot/README.md +5 -4
- package/examples/ros-mobile-robot/memo.identity.yaml +94 -0
- package/examples/ros-mobile-robot/memo.package.yaml +3 -1
- package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +26 -29
- package/examples/ros-mobile-robot/model/{catalog → methodology}/project.sysml +8 -14
- package/examples/software-only-medical-device/memo.package.yaml +3 -1
- package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +9 -10
- package/examples/software-only-medical-device/model/{catalog → methodology}/project.sysml +8 -9
- package/examples/surgical-closure-workflow/memo.package.yaml +3 -1
- package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +23 -26
- package/examples/surgical-closure-workflow/model/{catalog → methodology}/project.sysml +7 -5
- package/examples/surgical-robot/memo.package.yaml +3 -1
- package/examples/surgical-robot/model/catalog/surgical_robot.sysml +14 -12
- package/examples/surgical-robot/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/sysml-diagram-samples/README.md +1 -0
- package/examples/sysml-diagram-samples/memo.identity.yaml +459 -0
- package/examples/sysml-diagram-samples/memo.package.yaml +3 -1
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/viewpoint.sysml +10 -20
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +5 -5
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml +10 -13
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +11 -7
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/diagram_samples.sysml +63 -8
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/drill_down_view.sysml +88 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +25 -25
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml +6 -6
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +15 -17
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +21 -21
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml +7 -7
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +5 -5
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml +14 -14
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +16 -17
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +9 -9
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +7 -14
- package/examples/sysml-diagram-samples/model/{catalog → methodology}/project.sysml +5 -5
- package/examples/sysml-diagram-samples/model/sysml_v2_activity_example.sysml +1 -1
- package/examples/temperature-alarm/memo.identity.yaml +6 -0
- package/examples/temperature-alarm/memo.package.yaml +3 -1
- package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +43 -21
- package/examples/temperature-alarm/model/{catalog → methodology}/project.sysml +4 -5
- package/examples/ui-screen-regions/memo.identity.yaml +33 -0
- package/examples/ui-screen-regions/memo.package.yaml +3 -1
- package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +12 -12
- package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +18 -18
- package/examples/ui-screen-regions/model/catalog/artifacts/assets/catalog.sysml +6 -6
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/comments.sysml +3 -3
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/notes.sysml +1 -1
- package/examples/ui-screen-regions/model/catalog/artifacts/reviews/rationales.sysml +1 -1
- package/examples/ui-screen-regions/model/catalog/assurance/human_factors/human_factors.sysml +10 -10
- package/examples/ui-screen-regions/model/catalog/assurance/requirements/needs.sysml +1 -1
- package/examples/ui-screen-regions/model/catalog/assurance/requirements/requirements.sysml +12 -12
- package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +15 -15
- package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +6 -6
- package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +1 -2
- package/examples/ui-screen-regions/model/catalog/viewpoints/requirements/views/ui_requirements_trace.sysml +1 -2
- package/examples/ui-screen-regions/model/catalog/viewpoints/risk/views/ui_risk_chain.sysml +1 -2
- package/examples/ui-screen-regions/model/{catalog → methodology}/project.sysml +4 -5
- package/extensions/README.md +65 -16
- package/extensions/aadl/memo.package.yaml +1 -1
- package/extensions/aadl/src/aadl_extension.sysml +5 -2
- package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +29 -50
- package/extensions/clinical/memo.package.yaml +1 -1
- package/extensions/clinical/src/clinical_extension.sysml +2 -0
- package/extensions/cloud/memo.package.yaml +1 -1
- package/extensions/container/memo.package.yaml +1 -1
- package/extensions/messaging/memo.package.yaml +1 -1
- package/extensions/messaging/src/messaging_extension.sysml +2 -2
- package/extensions/ros/memo.package.yaml +1 -1
- package/extensions/ros/src/ros_extension.sysml +25 -24
- package/extensions/template/memo.package.yaml +1 -1
- package/extensions/template/model/extension.sysml +25 -0
- package/memo.manifest.yaml +1 -7
- package/methodologies/default/memo.package.yaml +1 -1
- package/methodologies/gpca/memo.package.yaml +1 -1
- package/ontology/memo.package.yaml +1 -1
- package/package.json +6 -4
- package/profile/memo.package.yaml +1 -1
- package/src/architecture/decisions/memo_decisions.sysml +9 -2
- package/src/architecture/functional/behavior/memo_behavior.sysml +27 -7
- package/src/architecture/functional/functions/memo_functions.sysml +45 -31
- package/src/architecture/functional/memo_architecture_functional.sysml +14 -0
- package/src/architecture/implementation/memo_architecture_implementation.sysml +21 -0
- package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +7 -0
- package/src/architecture/implementation/software/structure/memo_software_structure.sysml +58 -17
- package/src/architecture/implementation/ui/memo_ui.sysml +1 -1
- package/src/architecture/logical/interfaces/memo_interfaces.sysml +67 -58
- package/src/architecture/logical/memo_architecture_logical.sysml +13 -0
- package/src/architecture/logical/structure/memo_logical_structure.sysml +27 -8
- package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +4 -1
- package/src/architecture/operational/memo_architecture_operational.sysml +19 -0
- package/src/architecture/operational/scenarios/memo_scenarios.sysml +9 -8
- package/src/architecture/operational/structure/memo_operational.sysml +5 -2
- package/src/architecture/operational/use_cases/memo_use_cases.sysml +16 -8
- package/src/architecture/realization/deployment/memo_deployment.sysml +30 -10
- package/src/architecture/realization/memo_architecture_realization.sysml +13 -0
- package/src/architecture/realization/physical/memo_physical_architecture.sysml +61 -0
- package/src/architecture/variability/memo_variability.sysml +87 -0
- package/src/artifacts/configuration_management/memo_configuration_management.sysml +95 -3
- package/src/artifacts/core/memo_controlled_artifacts.sysml +4 -2
- package/src/artifacts/standards/cfr_21_820.sysml +12 -24
- package/src/artifacts/standards/fda_cybersecurity_2023.sysml +13 -20
- package/src/artifacts/standards/iec_60601_1.sysml +16 -32
- package/src/artifacts/standards/iec_60601_1_2.sysml +5 -10
- package/src/artifacts/standards/iec_60812.sysml +4 -8
- package/src/artifacts/standards/iec_62304.sysml +607 -47
- package/src/artifacts/standards/iec_62366_1.sysml +12 -24
- package/src/artifacts/standards/iec_81001_5_1.sysml +8 -16
- package/src/artifacts/standards/iso_13485.sysml +12 -24
- package/src/artifacts/standards/iso_14971.sysml +118 -20
- package/src/artifacts/standards/iso_iec_ieee_42010.sysml +3 -6
- package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +14 -4
- package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +1 -2
- package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +1 -2
- package/src/artifacts/templates/dhf/iec-62304/sad.md +1 -2
- package/src/artifacts/templates/dhf/iec-62304/sbom.md +1 -2
- package/src/artifacts/templates/dhf/iec-62304/sdp.md +1 -2
- package/src/artifacts/templates/dhf/iec-62304/soup.md +3 -5
- package/src/artifacts/templates/dhf/system/sad.md +1 -1
- package/src/artifacts/templates/dhf/system/standards-checklist.md +2 -2
- package/src/artifacts/templates/dhf/system/standards-traceability.md +1 -1
- package/src/assurance/cybersecurity/memo_cybersecurity.sysml +339 -13
- package/src/assurance/human_factors/memo_human_factors.sysml +6 -2
- package/src/assurance/safety_risk/analysis/memo_fmea.sysml +7 -3
- package/src/assurance/safety_risk/memo_risk.sysml +39 -1
- package/src/core/common/memo_common.sysml +61 -68
- package/src/core/enumerations/memo_enumerations.sysml +93 -9
- package/src/core/relationships/memo_relationships.sysml +17 -11
- package/src/core/relationships/memo_workspace_membership.sysml +284 -0
- package/src/core/semantics/semantics.sysml +58 -0
- package/src/core/terminology/terminology.sysml +7 -0
- package/src/memo_namespaces.sysml +6 -0
- package/src/methodology/archetypes/memo_archetypes.sysml +8 -16
- package/src/methodology/core/memo_core.sysml +85 -29
- package/src/methodology/profiles/memo_profiles.sysml +217 -61
- package/src/methodology/workflow/memo_workflow.sysml +28 -0
- package/src/rules/closure/closure_rules.sysml +250 -4
- package/src/rules/crosslayer/cross_layer_rules.sysml +11 -0
- package/src/rules/ontology/ontology_invariants.sysml +288 -48
- package/src/rules/quantitative/quantitative_rules.sysml +4 -0
- package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +28 -28
- package/src/viewpoints/clinical/clinical_viewpoint.sysml +2 -3
- package/src/viewpoints/context/context_viewpoint.sysml +2 -3
- package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +3 -5
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +2 -3
- package/src/viewpoints/definitions/memo_view_layout.sysml +150 -0
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +0 -4
- package/src/viewpoints/functional/functional_viewpoint.sysml +2 -3
- package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +2 -4
- package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +2 -4
- package/src/viewpoints/logical/logical_viewpoint.sysml +2 -3
- package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +2 -4
- package/src/viewpoints/operational/operational_viewpoint.sysml +2 -3
- package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +3 -5
- package/src/viewpoints/physical/physical_viewpoint.sysml +2 -3
- package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +2 -4
- package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +2 -4
- package/src/viewpoints/rendering/memo_rendering.sysml +50 -98
- package/src/viewpoints/requirements/requirements_viewpoint.sysml +2 -3
- package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +2 -4
- package/src/viewpoints/risk/risk_viewpoint.sysml +2 -3
- package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +2 -4
- package/src/viewpoints/software/software_viewpoint.sysml +2 -3
- package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +3 -5
- package/src/viewpoints/stakeholders_concerns/memo_stakeholders_concerns.sysml +11 -29
- package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +2 -3
- package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +1 -1
- package/src/viewpoints/usability/usability_viewpoint.sysml +2 -3
- package/src/viewpoints/verification/verification_viewpoint.sysml +2 -3
- package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +2 -4
- package/stage1/syside-67f92dc96ba75cd05b5c8d13.ids.gz +0 -0
- package/stage1/syside-67f92dc96ba75cd05b5c8d13.json.gz +0 -0
- package/templates/default/memo.package.yaml +6 -1
- package/templates/default/model/catalog/architecture/system.sysml +7 -3
- package/templates/default/model/{catalog → methodology}/project.sysml +3 -4
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.viewlayout +0 -47
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.viewlayout +0 -94
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.viewlayout +0 -13
- package/examples/ui-screen-regions/model/catalog/relationships.sysml +0 -8
- package/extensions/aadl/src/methodology/aadl_methodology.sysml +0 -19
- package/extensions/clinical/src/methodology/clinical_methodology.sysml +0 -24
- package/extensions/cloud/src/methodology/cloud_methodology.sysml +0 -19
- package/extensions/container/src/methodology/container_methodology.sysml +0 -19
- package/extensions/messaging/src/methodology/messaging_methodology.sysml +0 -19
- package/extensions/ros/src/methodology/ros_methodology.sysml +0 -27
- package/extensions/template/src/extension.sysml +0 -39
- package/templates/connected-device/memo.package.yaml +0 -13
- package/templates/connected-device/model/catalog/architecture/system.sysml +0 -5
- package/templates/connected-device/model/catalog/artifacts/catalog.sysml +0 -5
- package/templates/connected-device/model/catalog/assurance/requirements.sysml +0 -7
- package/templates/connected-device/model/catalog/project.sysml +0 -30
- package/templates/connected-device/package.json +0 -8
- package/templates/connected-device/syside.toml +0 -13
- package/templates/infusion-pump/memo.package.yaml +0 -13
- package/templates/infusion-pump/model/catalog/architecture/system.sysml +0 -5
- package/templates/infusion-pump/model/catalog/artifacts/catalog.sysml +0 -5
- package/templates/infusion-pump/model/catalog/assurance/requirements.sysml +0 -7
- package/templates/infusion-pump/model/catalog/project.sysml +0 -30
- package/templates/infusion-pump/package.json +0 -8
- package/templates/infusion-pump/syside.toml +0 -13
- package/templates/monitoring-device/memo.package.yaml +0 -13
- package/templates/monitoring-device/model/catalog/architecture/system.sysml +0 -5
- package/templates/monitoring-device/model/catalog/artifacts/catalog.sysml +0 -5
- package/templates/monitoring-device/model/catalog/assurance/requirements.sysml +0 -7
- package/templates/monitoring-device/model/catalog/project.sysml +0 -30
- package/templates/monitoring-device/package.json +0 -8
- package/templates/monitoring-device/syside.toml +0 -13
- package/templates/samd/memo.package.yaml +0 -13
- package/templates/samd/model/catalog/architecture/system.sysml +0 -5
- package/templates/samd/model/catalog/artifacts/catalog.sysml +0 -5
- package/templates/samd/model/catalog/assurance/requirements.sysml +0 -7
- package/templates/samd/model/catalog/project.sysml +0 -30
- package/templates/samd/package.json +0 -8
- package/templates/samd/syside.toml +0 -13
|
@@ -1,3 +1,39 @@
|
|
|
1
|
+
// Logical interfaces: the Interface definition, ports, exchange items, and
|
|
2
|
+
// the component exchange.
|
|
3
|
+
//
|
|
4
|
+
// ─── A component exchange is an interface ────────────────────────────────
|
|
5
|
+
//
|
|
6
|
+
// `ComponentExchange` is an `interface def`: the edge between two ports IS
|
|
7
|
+
// the exchange. It was a `part def` whose `sourceEndpoint`/`targetEndpoint`
|
|
8
|
+
// refs named the ports, beside a separate `flow` or `bind` naming them again,
|
|
9
|
+
// and CR-ONT-076 existed only to keep the two representations in step. It
|
|
10
|
+
// also lost information: the builder stored a dotted ref value as its first
|
|
11
|
+
// segment only, so every endpoint read as the enclosing device, and
|
|
12
|
+
// CR-ONT-072/073 checked the device instead of the port.
|
|
13
|
+
//
|
|
14
|
+
// Its ends are the ports, and they are ports, never components: §6.2 of the
|
|
15
|
+
// architecture plan requires an actual boundary port, and a rule
|
|
16
|
+
// (CR-ONT-072/073) says so because the compiler does not — it accepts a
|
|
17
|
+
// part at an interface end even when the definition types its ends.
|
|
18
|
+
//
|
|
19
|
+
// ─── Transport, delegation, and the choice between them ──────────────────
|
|
20
|
+
//
|
|
21
|
+
// Two ports joined by an interface still need a statement of what moves:
|
|
22
|
+
// the `flow` between the same two ports. The interface is the path, and the
|
|
23
|
+
// flow is the transfer over it.
|
|
24
|
+
//
|
|
25
|
+
// An enclosing part's boundary port and the port of a part inside it are a
|
|
26
|
+
// different case, decided per hop:
|
|
27
|
+
//
|
|
28
|
+
// flow when the hop has something of its own to model: a delay, a
|
|
29
|
+
// queue, a timing or latency budget, a protocol. Write it inside
|
|
30
|
+
// the enclosing part's body, where the boundary port is a source.
|
|
31
|
+
// binding when the boundary port is the inner port exposed and nothing
|
|
32
|
+
// happens between them: `binding name bind outer = inner { … }`,
|
|
33
|
+
// carrying the connection's identity and citation in its body.
|
|
34
|
+
//
|
|
35
|
+
// A delegation that is a binding is not a ComponentExchange: nothing
|
|
36
|
+
// interacts, and one feature is seen from both sides.
|
|
1
37
|
package memo_architecture_logical_interfaces {
|
|
2
38
|
private import ScalarValues::*;
|
|
3
39
|
|
|
@@ -15,40 +51,40 @@ package memo_architecture_logical_interfaces {
|
|
|
15
51
|
// DigitalInterface / SPIInterface / RestInterface … hierarchy: those were
|
|
16
52
|
// 20+ classes that differed only in the value of `protocol`.
|
|
17
53
|
|
|
54
|
+
// The common contract of an interface, whatever layer it is on: what
|
|
55
|
+
// crosses, which way, under what timing, and how much it matters to
|
|
56
|
+
// safety and security. It is abstract. An interface is a LOGICAL one
|
|
57
|
+
// (between components, in terms of what is exchanged), a SOFTWARE one
|
|
58
|
+
// (a contract between software items) or a PHYSICAL one (between
|
|
59
|
+
// hardware ports), and those are three different things that share
|
|
60
|
+
// attributes, not one thing with three sets of optional fields. Each
|
|
61
|
+
// specialization adds only what its layer can state: PhysicalInterface
|
|
62
|
+
// the signal and the medium, SoftwareInterface the API.
|
|
63
|
+
//
|
|
18
64
|
// Specializes the standard library interface as well as MEMO's base,
|
|
19
65
|
// rather than shadowing it — see the note on UseCase.
|
|
20
|
-
interface def Interface specializes MemoInterface, Interfaces::Interface {
|
|
21
|
-
attribute interfaceKind : InterfaceKind; //
|
|
66
|
+
abstract interface def Interface specializes MemoInterface, Interfaces::Interface {
|
|
67
|
+
attribute interfaceKind : InterfaceKind; // what crosses
|
|
22
68
|
attribute direction : DirectionKind;
|
|
23
69
|
attribute protocol : String; // "SPI", "CAN", "Ethernet", "REST", "4-20mA"
|
|
24
70
|
attribute protocolSemantics : String;
|
|
71
|
+
attribute timeoutMs : Real[0..1];
|
|
72
|
+
attribute retryPolicy : String[0..1];
|
|
25
73
|
attribute interactionPattern : String; // request-response, pub-sub, streaming…
|
|
26
|
-
attribute signalKind : String;
|
|
27
74
|
attribute timingSummary : String;
|
|
28
75
|
attribute timingConstraint : String;
|
|
29
76
|
attribute bandwidth : String;
|
|
30
|
-
attribute schemaReference : String;
|
|
31
77
|
attribute compatibilitySummary : String;
|
|
32
78
|
attribute isolationRequirement : String;
|
|
33
79
|
attribute safetyRelevant : Boolean;
|
|
34
80
|
attribute securityCriticality : CriticalityKind;
|
|
35
81
|
// Applied-part/patient-contact interfaces (IEC 60601-1) must state it.
|
|
36
82
|
attribute patientContactInterface : Boolean;
|
|
37
|
-
// ── hardware-signal descriptors (optional) ──
|
|
38
|
-
attribute directionality : DirectionKind[0..1];
|
|
39
|
-
attribute electricalStandard : String;
|
|
40
|
-
attribute nominalVoltageV : Real[0..1];
|
|
41
|
-
attribute nominalCurrentA : Real[0..1];
|
|
42
|
-
attribute bitRateBps : String;
|
|
43
|
-
attribute signaling : String;
|
|
44
|
-
attribute signalRange : String;
|
|
45
|
-
// ── software-API descriptors (optional) ──
|
|
46
|
-
attribute apiStyle : String;
|
|
47
83
|
}
|
|
48
84
|
|
|
49
|
-
// Software interaction contracts
|
|
50
|
-
//
|
|
51
|
-
//
|
|
85
|
+
// Software interaction contracts. Concrete technologies add their
|
|
86
|
+
// protocol roles and message flows; ports remain the endpoints that
|
|
87
|
+
// components actually own.
|
|
52
88
|
abstract interface def SoftwareInterface specializes Interface {
|
|
53
89
|
// `default`, not `=`. A bare `=` in a definition BINDS the value, and
|
|
54
90
|
// a binding cannot be overridden by a usage — which asserted that
|
|
@@ -56,6 +92,8 @@ package memo_architecture_logical_interfaces {
|
|
|
56
92
|
// inexpressible. A ROS topic publisher → subscriber is the obvious
|
|
57
93
|
// counterexample, and it is the common case rather than an exotic one.
|
|
58
94
|
attribute :>> direction default DirectionKind::inputOutput;
|
|
95
|
+
attribute apiStyle : String;
|
|
96
|
+
attribute schemaReference : String;
|
|
59
97
|
}
|
|
60
98
|
|
|
61
99
|
// A typed thing exchanged at a boundary. Concrete items such as
|
|
@@ -87,48 +125,19 @@ package memo_architecture_logical_interfaces {
|
|
|
87
125
|
port def SensorPort specializes DataPort { attribute sensorDomain : String; }
|
|
88
126
|
port def CommandPort specializes DataPort { attribute commandDomain : String; }
|
|
89
127
|
|
|
90
|
-
|
|
128
|
+
// An interaction between two component ports, and the properties of that
|
|
129
|
+
// connection itself: what kind of thing it carries and its timing
|
|
130
|
+
// discipline. Authored as a typed named interface between the two ports,
|
|
131
|
+
// with the transport over it as a `flow` between the same ports:
|
|
132
|
+
//
|
|
133
|
+
// interface ceTlmOutToOutput : ComponentExchange
|
|
134
|
+
// connect tlm.portTlmModeOut to outputBus.portOutputTlmModeIn {
|
|
135
|
+
// attribute :>> exchangeKind = FlowKind::status;
|
|
136
|
+
// }
|
|
137
|
+
// flow ceTlmOutToOutputFlow of InterfaceItem
|
|
138
|
+
// from tlm.portTlmModeOut to outputBus.portOutputTlmModeIn;
|
|
139
|
+
interface def ComponentExchange specializes MemoInterface {
|
|
91
140
|
attribute exchangeKind : FlowKind;
|
|
92
|
-
// Metaclass-neutral endpoints. CR-ONT-002 used to read: "Typed
|
|
93
|
-
// endpoints. A component or a boundary port may terminate an exchange,
|
|
94
|
-
// so the ends are MemoPart-typed." That reasoning was circular —
|
|
95
|
-
// PhysicalPort and SoftwarePort are part defs precisely SO THAT they
|
|
96
|
-
// could satisfy this typing, and the typing was justified by their
|
|
97
|
-
// being parts. Track A0 cut the circle at the ends, which is the side
|
|
98
|
-
// that has to move first: A1 turns those two into `port def`s, and a
|
|
99
|
-
// port cannot specialize a part-based type.
|
|
100
|
-
//
|
|
101
|
-
// The constraint the type was carrying — an endpoint is a component or
|
|
102
|
-
// a boundary port, never a requirement or a document — is now stated
|
|
103
|
-
// where it can be checked across metaclasses, as CR-ONT-072/073 in
|
|
104
|
-
// src/rules/ontology/ontology_invariants.sysml.
|
|
105
|
-
//
|
|
106
|
-
// `Base::Anything` rather than no type at all — the only place in this
|
|
107
|
-
// change that reaches for it. The 36 untyped ends in
|
|
108
|
-
// memo_core_relationships are `end` declarations, and an untyped `end`
|
|
109
|
-
// is established practice; an untyped `ref` with a multiplicity is not
|
|
110
|
-
// something MEMO's own grammar accepts (`Expecting token of type ';'
|
|
111
|
-
// but found '['`), and the grammar is not in this session's scope.
|
|
112
|
-
// `Base::Anything` is what the standard's `Allocations::Allocation`
|
|
113
|
-
// types its own ends with, so it is the conforming spelling of "any
|
|
114
|
-
// element", not a workaround.
|
|
115
|
-
ref sourceEndpoint : Base::Anything[0..1];
|
|
116
|
-
ref targetEndpoint : Base::Anything[0..1];
|
|
117
|
-
// `sourcePortPath` / `targetPortPath` are GONE. They were String
|
|
118
|
-
// "descriptive port paths (e.g. TLM.TLM_MODE_OUT) for AADL round-trips;
|
|
119
|
-
// labels only — never references", which is §13.3's string
|
|
120
|
-
// pseudo-reference: nothing can follow a string to an element, so
|
|
121
|
-
// anything built on them produced no traceability.
|
|
122
|
-
//
|
|
123
|
-
// Measured across the 92 sites in the GPCA example before removing
|
|
124
|
-
// them: 23 merely restated the endpoint the ref already named (15 gave
|
|
125
|
-
// the port's own display name, 8 were prose like "HW-001:
|
|
126
|
-
// GPCA_HW_Sensors"), and the other 69 named a port ON the endpoint
|
|
127
|
-
// component, resolving to 49 distinct AADL features. Those 49 are
|
|
128
|
-
// declared as real ports now and the endpoint refs point straight at
|
|
129
|
-
// them, which is what Track A1 making SoftwarePort a `port def` is for.
|
|
130
|
-
// The AADL round-trip is better served by an element than by its name.
|
|
131
|
-
ref allocatedExchanges : FunctionalExchange[0..*];
|
|
132
141
|
attribute direction : DirectionKind;
|
|
133
142
|
// Connection timing discipline from the source architecture
|
|
134
143
|
// (e.g. AADL Communication_Properties::Timing — immediate
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// The logical architecture layer as one package.
|
|
2
|
+
//
|
|
3
|
+
// A layer is a namespace of packages: every package whose name begins
|
|
4
|
+
// `memo_architecture_logical_`. This package publicly imports each of them, so
|
|
5
|
+
// `public import memo_architecture_logical::*;` in a methodology's package selects the whole
|
|
6
|
+
// layer, and the same import in any package makes the layer's definitions
|
|
7
|
+
// visible. It declares nothing of its own. test/package.test.mjs holds the list
|
|
8
|
+
// to exactly the packages in the namespace, so a package added to the layer is
|
|
9
|
+
// selected with it.
|
|
10
|
+
package memo_architecture_logical {
|
|
11
|
+
public import memo_architecture_logical_interfaces::*;
|
|
12
|
+
public import memo_architecture_logical_structure::*;
|
|
13
|
+
}
|
|
@@ -10,6 +10,7 @@ package memo_architecture_logical_structure {
|
|
|
10
10
|
private import memo_core_common::*;
|
|
11
11
|
private import memo_core_enumerations::*;
|
|
12
12
|
private import memo_core_relationships::*;
|
|
13
|
+
private import memo_architecture_logical_interfaces::Interface;
|
|
13
14
|
|
|
14
15
|
// What a logical connection carries: information and control, but also
|
|
15
16
|
// energy, material, fluid, and mechanical force (§10).
|
|
@@ -139,9 +140,8 @@ package memo_architecture_logical_structure {
|
|
|
139
140
|
|
|
140
141
|
// Boundary features and contracts.
|
|
141
142
|
port def LogicalPort specializes MemoPort;
|
|
142
|
-
interface def LogicalInterface specializes
|
|
143
|
+
interface def LogicalInterface specializes Interface {
|
|
143
144
|
attribute contentKind : FlowContentKind;
|
|
144
|
-
attribute interactionPattern : String;
|
|
145
145
|
end providerPort : LogicalPort;
|
|
146
146
|
end consumerPort : ~LogicalPort;
|
|
147
147
|
}
|
|
@@ -162,14 +162,33 @@ package memo_architecture_logical_structure {
|
|
|
162
162
|
:> annotatedElement : SysML::ConnectionUsage;
|
|
163
163
|
:>> baseType = logicalConnectorLinks meta SysML::Usage;
|
|
164
164
|
}
|
|
165
|
-
// A transfer
|
|
166
|
-
|
|
165
|
+
// A transfer between two ports, carrying what a reader needs to know about
|
|
166
|
+
// the transfer itself. Authored as a typed named flow between the item
|
|
167
|
+
// features the two ports declare, the way `FunctionalExchange` is between
|
|
168
|
+
// function parameters:
|
|
169
|
+
//
|
|
170
|
+
// part lcMonitor { out port pSpo2Out : LogicalPort { out item spo2 :> spo2Item; } }
|
|
171
|
+
// flow exSpo2ToGateway : LogicalExchange
|
|
172
|
+
// from lcMonitor.pSpo2Out.spo2 to lcGateway.pSpo2In.spo2 {
|
|
173
|
+
// attribute :>> contentKind = FlowContentKind::measurement;
|
|
174
|
+
// }
|
|
175
|
+
//
|
|
176
|
+
// It was a `part def` holding `sourcePort`, `targetPort` and
|
|
177
|
+
// `exchangedItem` refs. No example set either port, so no exchange said
|
|
178
|
+
// what it connected. The flow's ends are those ports now,
|
|
179
|
+
// and its payload the item feature on them. `direction` is not carried
|
|
180
|
+
// over: the ports say `in` and `out`, and a second writable direction is
|
|
181
|
+
// the duplicate §8 of the architecture plan forbids.
|
|
182
|
+
//
|
|
183
|
+
// The ends are not restricted to `LogicalPort`. Two of the three examples
|
|
184
|
+
// move a specimen or a force between hardware parts, and a flow def that
|
|
185
|
+
// named `LogicalPort` ends would have refused them. `payload` is not
|
|
186
|
+
// declared either: `of <type>` on a usage of a flow def that declares a
|
|
187
|
+
// feature is not distinguishable (namespace distinguishability) from the
|
|
188
|
+
// library's own `payload`, so the payload lives on the ports.
|
|
189
|
+
abstract flow def LogicalExchange {
|
|
167
190
|
attribute contentKind : FlowContentKind;
|
|
168
|
-
attribute direction : DirectionKind;
|
|
169
191
|
attribute latencyRequirement : String;
|
|
170
|
-
ref exchangedItem : LogicalExchangeItem[0..1];
|
|
171
|
-
ref sourcePort : LogicalPort[0..1];
|
|
172
|
-
ref targetPort : LogicalPort[0..1];
|
|
173
192
|
}
|
|
174
193
|
|
|
175
194
|
// States and modes of the logical solution (kept distinct from UI state
|
|
@@ -33,9 +33,12 @@ package memo_architecture_operational_context_stakeholders {
|
|
|
33
33
|
enum correspondence;
|
|
34
34
|
enum 'use';
|
|
35
35
|
}
|
|
36
|
+
// The governor spans metaclasses — a CorrespondenceRule is a part, an
|
|
37
|
+
// IntendedUse a requirement — so that end stays untyped, as DerivesFrom's
|
|
38
|
+
// driver does. What is governed is always a structural element.
|
|
36
39
|
connection def Governs :> MemoRelationship {
|
|
37
40
|
attribute governKind : GovernKind;
|
|
38
|
-
end governor
|
|
41
|
+
end governor :>> source;
|
|
39
42
|
end governedElement : MemoPart :>> target;
|
|
40
43
|
}
|
|
41
44
|
abstract connection governsLinks : Governs[*];
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// The operational analysis layer as one package.
|
|
2
|
+
//
|
|
3
|
+
// A layer is a namespace of packages: every package whose name begins
|
|
4
|
+
// `memo_architecture_operational_`. This package publicly imports each of them, so
|
|
5
|
+
// `public import memo_architecture_operational::*;` in a methodology's package selects the whole
|
|
6
|
+
// layer, and the same import in any package makes the layer's definitions
|
|
7
|
+
// visible. It declares nothing of its own. test/package.test.mjs holds the list
|
|
8
|
+
// to exactly the packages in the namespace, so a package added to the layer is
|
|
9
|
+
// selected with it.
|
|
10
|
+
package memo_architecture_operational {
|
|
11
|
+
public import memo_architecture_operational_activities::*;
|
|
12
|
+
public import memo_architecture_operational_context_actors::*;
|
|
13
|
+
public import memo_architecture_operational_context_stakeholders::*;
|
|
14
|
+
public import memo_architecture_operational_context_use_context::*;
|
|
15
|
+
public import memo_architecture_operational_scenarios::*;
|
|
16
|
+
public import memo_architecture_operational_structure::*;
|
|
17
|
+
public import memo_architecture_operational_use_cases::*;
|
|
18
|
+
public import memo_architecture_operational_workflows::*;
|
|
19
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
// Scenario foundation. A scenario is a selected path through a
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
1
|
+
// Scenario foundation. A scenario is a selected path through a workflow,
|
|
2
|
+
// classified by its kind (nominal or alternate). It is nested in the workflow
|
|
3
|
+
// it is a path through, so a nominal scenario and its alternates are siblings
|
|
4
|
+
// there. An actual or hypothetical execution is a native usage of the
|
|
5
|
+
// scenario, not a separate element.
|
|
6
6
|
package memo_architecture_operational_scenarios {
|
|
7
7
|
private import Metaobjects::SemanticMetadata;
|
|
8
8
|
private import ScalarValues::*;
|
|
@@ -32,9 +32,10 @@ package memo_architecture_operational_scenarios {
|
|
|
32
32
|
attribute postCondition : String;
|
|
33
33
|
attribute pathSummary : String;
|
|
34
34
|
|
|
35
|
-
// The workflow this scenario belongs to is
|
|
36
|
-
// (HasScenario
|
|
37
|
-
//
|
|
35
|
+
// The workflow this scenario belongs to is the one it is nested in
|
|
36
|
+
// (a `HasScenario` relation was removed for that reason); a
|
|
37
|
+
// nominal/alternate pair are scenarios of the same workflow,
|
|
38
|
+
// distinguished by scenarioKind — no baseScenario back-ref.
|
|
38
39
|
// Actors are derived from `perform` on the nested steps, not listed.
|
|
39
40
|
ref useContext : UseContext[0..1];
|
|
40
41
|
// threat scenario
|
|
@@ -11,8 +11,11 @@ package memo_architecture_operational_structure {
|
|
|
11
11
|
// purpose and the root of the operational spine. A MemoMission, because
|
|
12
12
|
// "mission" has no medical-device meaning — intended use is what a device
|
|
13
13
|
// exists to do. Was in memo_assurance_requirements; moved here as the
|
|
14
|
-
// operational-world root.
|
|
15
|
-
|
|
14
|
+
// operational-world root. It is a `requirement def`: the intended use is
|
|
15
|
+
// the top obligation the device's design inputs derive from, and ISO 14971
|
|
16
|
+
// 5.2 asks for it to be documented as the starting point of risk analysis.
|
|
17
|
+
// It was a `part def`, which made it a structural thing.
|
|
18
|
+
requirement def IntendedUse :> MemoMission {
|
|
16
19
|
attribute indication : String;
|
|
17
20
|
attribute contraindication : String;
|
|
18
21
|
attribute patientPopulation : String;
|
|
@@ -35,17 +35,24 @@ package memo_architecture_operational_use_cases {
|
|
|
35
35
|
attribute postCondition : String;
|
|
36
36
|
// clinical / service / manufacturing / development
|
|
37
37
|
attribute useCaseKind : UseCaseKind;
|
|
38
|
+
// A system use case that no clinical use case includes is a finding (rule CR-ONT-086)
|
|
39
|
+
// unless it says so: set this for a use case that is deliberately carried out alone,
|
|
40
|
+
// such as a service procedure. It is not a second kind of use case.
|
|
41
|
+
attribute standalone : Boolean;
|
|
38
42
|
|
|
39
43
|
// The device or system under consideration supports the goal. Native
|
|
40
|
-
// `subject`, not `ref` (R10-S6):
|
|
41
|
-
// before
|
|
42
|
-
//
|
|
44
|
+
// `subject`, not `ref` (R10-S6): a use case needs an explicit subject
|
|
45
|
+
// before it can declare `actor` (the subject parameter comes first),
|
|
46
|
+
// and "the device/system under consideration"
|
|
43
47
|
// is exactly what a case's subject means, so this was a duplicate
|
|
44
48
|
// waiting to surface once `actor` needed a subject to attach to.
|
|
45
49
|
subject supportingSystem : MemoPart[0..1];
|
|
46
|
-
ref primaryUser : User[0..1];
|
|
47
|
-
ref supportingActors : OperationalParticipant[0..*];
|
|
48
50
|
ref useContext : UseContext[0..1];
|
|
51
|
+
// Who takes part is native `actor` (`actor <role> = <participant>;`),
|
|
52
|
+
// inherited from `UseCases::UseCase`. `primaryUser` and
|
|
53
|
+
// `supportingActors` refs stood here as a second way of saying the
|
|
54
|
+
// same thing and were removed; which actor initiates is carried by
|
|
55
|
+
// the actor's name, as the note on `Initiates` below says.
|
|
49
56
|
}
|
|
50
57
|
|
|
51
58
|
connection def Motivates :> MemoRelationship {
|
|
@@ -65,7 +72,8 @@ package memo_architecture_operational_use_cases {
|
|
|
65
72
|
// named on the use case, not in a relationship type. Write
|
|
66
73
|
// `actor <role> = <existingElement>;` inside the use case instead.
|
|
67
74
|
// UML use-case decomposition (`Includes`) is native `include use case` /
|
|
68
|
-
// `include` (R10-S6); write that instead of a connection here.
|
|
69
|
-
// has
|
|
70
|
-
//
|
|
75
|
+
// `include` (R10-S6); write that instead of a connection here. SysML v2
|
|
76
|
+
// has no use-case `extend` (the textual BNF defines IncludeUseCaseUsage
|
|
77
|
+
// and nothing for extend), and MEMO does not add one: an optional path
|
|
78
|
+
// through a use case is an alternate scenario, not a second use case.
|
|
71
79
|
}
|
|
@@ -20,7 +20,7 @@ package memo_architecture_realization_deployment {
|
|
|
20
20
|
private import memo_core_relationships::*;
|
|
21
21
|
private import memo_architecture_implementation_software_structure::*;
|
|
22
22
|
private import memo_architecture_implementation_software_runtime::*;
|
|
23
|
-
private import
|
|
23
|
+
private import memo_architecture_implementation_hardware_common::PhysicalComponent;
|
|
24
24
|
private import memo_architecture_realization_physical::*;
|
|
25
25
|
private import memo_architecture_functional_functions::*;
|
|
26
26
|
private import memo_architecture_logical_structure::*;
|
|
@@ -52,6 +52,24 @@ package memo_architecture_realization_deployment {
|
|
|
52
52
|
:> annotatedElement : SysML::AllocationDefinition;
|
|
53
53
|
:> annotatedElement : SysML::AllocationUsage;
|
|
54
54
|
:>> baseType = buildsIntoLinks meta SysML::Usage;
|
|
55
|
+
}
|
|
56
|
+
// A logical component is REALIZED BY the hardware or software that implements it. The
|
|
57
|
+
// logical and the implementation architectures are separate structures and stay
|
|
58
|
+
// separate: nothing is nested (a logical component never contains software or a
|
|
59
|
+
// physical part, CR-ONT-078); the two are joined by an allocation, as the language
|
|
60
|
+
// joins structures across domains (SysML-textual-bnf.kebnf:792-801, AllocationDefinition and AllocationUsage) and as SYSMOD
|
|
61
|
+
// does with its `logical2product` allocation, logical architecture to product
|
|
62
|
+
// architecture, logical as the source. The target is any part, as HostedBy's ends are:
|
|
63
|
+
// a hardware assembly and a software system are both MemoParts.
|
|
64
|
+
allocation def RealizedBy :> MemoRelationship, Allocations::Allocation {
|
|
65
|
+
end logicalComponent : LogicalComponent :>> source;
|
|
66
|
+
end realization : MemoPart :>> target;
|
|
67
|
+
}
|
|
68
|
+
abstract connection realizedByLinks : RealizedBy[*];
|
|
69
|
+
metadata def <realizedBy> RealizedByMetadata :> SemanticMetadata {
|
|
70
|
+
:> annotatedElement : SysML::AllocationDefinition;
|
|
71
|
+
:> annotatedElement : SysML::AllocationUsage;
|
|
72
|
+
:>> baseType = realizedByLinks meta SysML::Usage;
|
|
55
73
|
}
|
|
56
74
|
// Every usage of this already writes `allocation x : DeploysTo allocate a
|
|
57
75
|
// to b;` -- the declaration was the only part still saying `connection`.
|
|
@@ -92,7 +110,7 @@ package memo_architecture_realization_deployment {
|
|
|
92
110
|
// language says so. The double specialization keeps MEMO's identification
|
|
93
111
|
// core from `MemoRelationship` while adding the standard's allocation
|
|
94
112
|
// semantics; both root on `Connections::BinaryConnection`, so this is a
|
|
95
|
-
// diamond and not a conflict. Verified
|
|
113
|
+
// diamond and not a conflict. Verified with a SysML v2 compiler against a
|
|
96
114
|
// negative control (a non-existent supertype is reported), so the clean
|
|
97
115
|
// result is the checker agreeing rather than the checker skipping.
|
|
98
116
|
|
|
@@ -111,17 +129,19 @@ package memo_architecture_realization_deployment {
|
|
|
111
129
|
:>> baseType = memoryBindingLinks meta SysML::Usage;
|
|
112
130
|
}
|
|
113
131
|
|
|
114
|
-
// AADL `actual_connection_binding`. Which physical
|
|
115
|
-
//
|
|
116
|
-
//
|
|
117
|
-
// the
|
|
118
|
-
//
|
|
119
|
-
// to
|
|
132
|
+
// AADL `actual_connection_binding`. Which physical thing carries an
|
|
133
|
+
// interface: a network medium under a component exchange, a cable or
|
|
134
|
+
// harness under a hardware `Interface`, a connector, a tube. The source is
|
|
135
|
+
// the interface usage rather than a link, because the interface is the
|
|
136
|
+
// ELEMENT that owns the budget (§19.3) and a link instance is not
|
|
137
|
+
// something the graph can bind to; it is also exactly where the latency
|
|
138
|
+
// the medium contributes has to be accounted. Ends are the two bases
|
|
139
|
+
// (MemoInterface, PhysicalComponent) so one binding serves every layer.
|
|
120
140
|
allocation def ConnectionBinding :> MemoRelationship, Allocations::Allocation {
|
|
121
141
|
attribute allocatedBandwidth : String;
|
|
122
142
|
attribute mediumLatencyMs : Real;
|
|
123
|
-
end boundExchange :
|
|
124
|
-
end medium :
|
|
143
|
+
end boundExchange : MemoInterface :>> source;
|
|
144
|
+
end medium : PhysicalComponent :>> target;
|
|
125
145
|
}
|
|
126
146
|
abstract connection connectionBindingLinks : ConnectionBinding[*];
|
|
127
147
|
metadata def <connectionBinding> ConnectionBindingMetadata :> SemanticMetadata {
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// The realization (deployment and physical) layer as one package.
|
|
2
|
+
//
|
|
3
|
+
// A layer is a namespace of packages: every package whose name begins
|
|
4
|
+
// `memo_architecture_realization_`. This package publicly imports each of them, so
|
|
5
|
+
// `public import memo_architecture_realization::*;` in a methodology's package selects the whole
|
|
6
|
+
// layer, and the same import in any package makes the layer's definitions
|
|
7
|
+
// visible. It declares nothing of its own. test/package.test.mjs holds the list
|
|
8
|
+
// to exactly the packages in the namespace, so a package added to the layer is
|
|
9
|
+
// selected with it.
|
|
10
|
+
package memo_architecture_realization {
|
|
11
|
+
public import memo_architecture_realization_deployment::*;
|
|
12
|
+
public import memo_architecture_realization_physical::*;
|
|
13
|
+
}
|
|
@@ -6,6 +6,7 @@ package memo_architecture_realization_physical {
|
|
|
6
6
|
|
|
7
7
|
private import memo_core_common::*;
|
|
8
8
|
private import memo_core_enumerations::*;
|
|
9
|
+
private import memo_architecture_logical_interfaces::Interface;
|
|
9
10
|
// For PhysicalElement: a processing node and a memory device ARE physical
|
|
10
11
|
// things — a board and a chip — and specialized MemoPart directly only
|
|
11
12
|
// because the physical family had no shared root until CR-ONT-079 needed
|
|
@@ -58,4 +59,64 @@ package memo_architecture_realization_physical {
|
|
|
58
59
|
attribute portCategory : PortCategoryKind;
|
|
59
60
|
attribute connectorType : String;
|
|
60
61
|
}
|
|
62
|
+
|
|
63
|
+
// ─── Connecting hardware ─────────────────────────────────────────────
|
|
64
|
+
//
|
|
65
|
+
// Hardware is parts with ports. A port on one part is joined to a port on
|
|
66
|
+
// another by a PhysicalInterface, and what crosses it is a PhysicalFlow.
|
|
67
|
+
// They are the hardware-layer counterparts of LogicalInterface and
|
|
68
|
+
// LogicalExchange, and of SoftwareInterface: the same shape, but each
|
|
69
|
+
// states only what its layer can, so a hardware interface is never
|
|
70
|
+
// described in terms of a software API or a logical content kind.
|
|
71
|
+
//
|
|
72
|
+
// The interface is the CONTRACT (an `interface` usage joins two specific
|
|
73
|
+
// ports; the def says what kind of link it is). The plug, cable, header
|
|
74
|
+
// or tube that physically carries it is a part of its own (Cable,
|
|
75
|
+
// PhysicalConnectorPart, ...), related to the interface by a
|
|
76
|
+
// ConnectionBinding allocation. PhysicalPort.connectorType names what a
|
|
77
|
+
// port exposes.
|
|
78
|
+
//
|
|
79
|
+
// part pump {
|
|
80
|
+
// out port pMotorDrive : PhysicalPort { out item drive; }
|
|
81
|
+
// }
|
|
82
|
+
// part driver {
|
|
83
|
+
// in port pMotorIn : PhysicalPort { in item drive; }
|
|
84
|
+
// }
|
|
85
|
+
// part motorHarness : Cable;
|
|
86
|
+
// interface cnMotorDrive : PhysicalInterface
|
|
87
|
+
// connect pump.pMotorDrive to driver.pMotorIn {
|
|
88
|
+
// attribute :>> signalingKind = SignalingKind::pulse;
|
|
89
|
+
// attribute :>> nominalVoltageV = 3.3;
|
|
90
|
+
// }
|
|
91
|
+
// flow flMotorDrive : PhysicalFlow
|
|
92
|
+
// from pump.pMotorDrive.drive to driver.pMotorIn.drive {
|
|
93
|
+
// attribute :>> quantity = "step pulses";
|
|
94
|
+
// }
|
|
95
|
+
// allocation cbMotorDrive : ConnectionBinding
|
|
96
|
+
// allocate cnMotorDrive to motorHarness;
|
|
97
|
+
interface def PhysicalInterface specializes Interface {
|
|
98
|
+
// analog, digital, discrete, pulse or power transfer. Fill in the
|
|
99
|
+
// descriptors that kind needs: a range for analog, a bit rate and
|
|
100
|
+
// protocol for digital, a frequency for pulse.
|
|
101
|
+
attribute signalingKind : SignalingKind;
|
|
102
|
+
attribute mediumKind : PhysicalMediumKind;
|
|
103
|
+
attribute electricalStandard : String;
|
|
104
|
+
attribute nominalVoltageV : Real[0..1];
|
|
105
|
+
attribute nominalCurrentA : Real[0..1];
|
|
106
|
+
attribute bitRateBps : String;
|
|
107
|
+
attribute signalRange : String;
|
|
108
|
+
attribute connectorStandard : String;
|
|
109
|
+
end sourcePort : PhysicalPort;
|
|
110
|
+
end targetPort : PhysicalPort;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
// What crosses a physical interface, as a quantity: a voltage, a
|
|
114
|
+
// current, a pressure, a force, a flow of fluid.
|
|
115
|
+
abstract flow def PhysicalFlow {
|
|
116
|
+
attribute quantity : String;
|
|
117
|
+
attribute unit : String;
|
|
118
|
+
attribute nominalValue : String;
|
|
119
|
+
attribute minValue : String;
|
|
120
|
+
attribute maxValue : String;
|
|
121
|
+
}
|
|
61
122
|
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
// Features and design options.
|
|
2
|
+
//
|
|
3
|
+
// A design option is native SysML: a `variation` (a definition or a usage whose
|
|
4
|
+
// body holds only `variant` members; SysML-textual-bnf.kebnf:224 for the definition
|
|
5
|
+
// prefix, :282 for the usage prefix, :254-256 the variant member). MEMO adds
|
|
6
|
+
// nothing to how one is written. What SysML has no word for is WHY a variant exists
|
|
7
|
+
// and WHICH ones go together: that is a product feature.
|
|
8
|
+
//
|
|
9
|
+
// part featEuMarket : ProductFeature; // the market EU releases target
|
|
10
|
+
// variation part energyOutput : LogicalComponent {
|
|
11
|
+
// variant part euOutput : LogicalComponent; // a variant, for the EU
|
|
12
|
+
// variant part usOutput : LogicalComponent;
|
|
13
|
+
// }
|
|
14
|
+
// #RealizesFeature dependency from energyOutput::euOutput to featEuMarket;
|
|
15
|
+
// connection : RequiresFeature connect ... // one feature needs another
|
|
16
|
+
//
|
|
17
|
+
// A release selects features (`#SelectsFeature`), and through them the variants it
|
|
18
|
+
// contains; a rule counts one variant per variation point from that. A feature is
|
|
19
|
+
// a usage like any other part, named by the family, and a platform package may
|
|
20
|
+
// declare the family's features once.
|
|
21
|
+
//
|
|
22
|
+
// A variation point cannot own attributes: SysIDE rejects an owned feature in a
|
|
23
|
+
// variation (`usage-variation-owned-feature-membership`). Identity metadata is an
|
|
24
|
+
// annotation and is allowed (measured on E0, 2026-10-13); `status` and anything else
|
|
25
|
+
// a variation point would carry goes on its variants.
|
|
26
|
+
package memo_architecture_variability {
|
|
27
|
+
private import Metaobjects::SemanticMetadata;
|
|
28
|
+
private import ScalarValues::*;
|
|
29
|
+
|
|
30
|
+
private import memo_core_common::*;
|
|
31
|
+
private import memo_core_enumerations::*;
|
|
32
|
+
private import memo_core_relationships::*;
|
|
33
|
+
|
|
34
|
+
// Named ProductFeature, not Feature: `Feature` is the KerML metaclass, and the
|
|
35
|
+
// builder falls back to a metaclass name for a kind it cannot place.
|
|
36
|
+
//
|
|
37
|
+
// A feature's page is what is said about it: its prose is the element's `doc`, and
|
|
38
|
+
// the analysis is these four statements, each optional until someone has an answer.
|
|
39
|
+
// What the feature shows is curated: `#ShowsView` below names its views.
|
|
40
|
+
part def ProductFeature specializes MemoPart {
|
|
41
|
+
/** What the feature gives the people who use the product, in a sentence or two. */
|
|
42
|
+
attribute valueProposition : String[0..1];
|
|
43
|
+
/** Who it is for: the roles or segments that gain from it. */
|
|
44
|
+
attribute targetUsers : String[0..1];
|
|
45
|
+
/** How anyone will know it worked: the measure, and the level that counts as success. */
|
|
46
|
+
attribute successMeasure : String[0..1];
|
|
47
|
+
/** What has to hold for the value to be real, and what is not yet known. */
|
|
48
|
+
attribute assumptions : String[0..1];
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// `Requires` is taken by the native `require` relation, so these say what they join.
|
|
52
|
+
connection def RequiresFeature :> MemoRelationship {
|
|
53
|
+
doc /* Selecting the source feature needs the target feature selected too. */
|
|
54
|
+
end dependentFeature : ProductFeature :>> source;
|
|
55
|
+
end requiredFeature : ProductFeature :>> target;
|
|
56
|
+
}
|
|
57
|
+
abstract connection requiresFeatureLinks : RequiresFeature[*];
|
|
58
|
+
metadata def <requiresFeature> RequiresFeatureMetadata :> SemanticMetadata {
|
|
59
|
+
:> annotatedElement : SysML::ConnectionDefinition;
|
|
60
|
+
:> annotatedElement : SysML::ConnectionUsage;
|
|
61
|
+
:>> baseType = requiresFeatureLinks meta SysML::Usage;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
connection def ExcludesFeature :> MemoRelationship {
|
|
65
|
+
doc /* The two features cannot be selected together. Symmetric: either end may be written first. */
|
|
66
|
+
end firstFeature : ProductFeature :>> source;
|
|
67
|
+
end secondFeature : ProductFeature :>> target;
|
|
68
|
+
}
|
|
69
|
+
abstract connection excludesFeatureLinks : ExcludesFeature[*];
|
|
70
|
+
metadata def <excludesFeature> ExcludesFeatureMetadata :> SemanticMetadata {
|
|
71
|
+
:> annotatedElement : SysML::ConnectionDefinition;
|
|
72
|
+
:> annotatedElement : SysML::ConnectionUsage;
|
|
73
|
+
:>> baseType = excludesFeatureLinks meta SysML::Usage;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Typed dependencies (memo_core_relationships::MemoTypedDependency): the variant
|
|
77
|
+
// is nested in its variation, so it is a dependency's client by qualified name.
|
|
78
|
+
metadata def RealizesFeature :> MemoTypedDependency {
|
|
79
|
+
doc /* `#RealizesFeature dependency from <variant> to <feature>;` The variant exists to give the family this feature. */
|
|
80
|
+
}
|
|
81
|
+
metadata def SelectsFeature :> MemoTypedDependency {
|
|
82
|
+
doc /* `#SelectsFeature dependency from <release> to <feature>, <feature>;` The release contains the variants that realize these features. */
|
|
83
|
+
}
|
|
84
|
+
metadata def ShowsView :> MemoTypedDependency {
|
|
85
|
+
doc /* `#ShowsView dependency from <feature> to <view>, <view>;` The views the feature's viewpoint lists: chosen for what the feature demonstrates, not found by a rule. */
|
|
86
|
+
}
|
|
87
|
+
}
|