@memoarchitect/ontology 0.12.1 → 0.15.0
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 -358
- 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 -91
- 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 +675 -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 +7 -29
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/browser_view.sysml +12 -36
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +13 -25
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/diagram_samples.sysml +388 -0
- 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 +27 -36
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/grid_view.sysml +8 -21
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +17 -65
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +23 -32
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/package_view.sysml +9 -22
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +7 -22
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/sequence_view.sysml +18 -34
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +2 -9
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +18 -42
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +11 -24
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +9 -36
- package/examples/sysml-diagram-samples/model/methodology/project.sysml +40 -0
- 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 +51 -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 +4 -5
- package/src/viewpoints/context/context_viewpoint.sysml +4 -5
- package/src/viewpoints/context/views/system_context_view/system_context_view.sysml +3 -5
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +4 -5
- package/src/viewpoints/definitions/memo_view_layout.sysml +150 -0
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +3 -5
- package/src/viewpoints/functional/functional_viewpoint.sysml +4 -5
- 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 +4 -5
- package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +2 -4
- package/src/viewpoints/operational/operational_viewpoint.sysml +4 -5
- package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +3 -5
- package/src/viewpoints/physical/physical_viewpoint.sysml +4 -5
- 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 +4 -5
- package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +2 -4
- package/src/viewpoints/risk/risk_viewpoint.sysml +4 -5
- package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +2 -4
- package/src/viewpoints/software/software_viewpoint.sysml +4 -5
- package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +3 -5
- package/src/viewpoints/{definitions → stakeholders_concerns}/memo_stakeholders_concerns.sysml +45 -36
- package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +4 -5
- package/src/viewpoints/ui_layout/views/screen_layout_view/screen_layout_view.sysml +1 -1
- package/src/viewpoints/usability/usability_viewpoint.sysml +4 -5
- package/src/viewpoints/verification/verification_viewpoint.sysml +4 -5
- 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/project.sysml +0 -26
- 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
|
@@ -40,21 +40,34 @@ package memo_architecture_functional_behavior {
|
|
|
40
40
|
// records so the two are not confused.
|
|
41
41
|
metadata def TransitionRecord {
|
|
42
42
|
attribute id : String;
|
|
43
|
-
attribute name : String;
|
|
44
43
|
attribute trigger : String;
|
|
45
44
|
attribute guardSummary : String;
|
|
46
45
|
attribute effectSummary : String;
|
|
47
46
|
attribute sourceReference : String;
|
|
48
47
|
}
|
|
49
48
|
|
|
50
|
-
// A
|
|
51
|
-
//
|
|
52
|
-
|
|
49
|
+
// A behavioural obligation, such as an invariant, transition rule,
|
|
50
|
+
// temporal claim, assumption, or guarantee. It is a `requirement def`
|
|
51
|
+
// because that is what it is: a claim the design must meet and a
|
|
52
|
+
// verification case can `verify`. It was a `part def` under
|
|
53
|
+
// VerifiableElement, which made a property a structural thing and left
|
|
54
|
+
// native `verify` unable to name it.
|
|
55
|
+
requirement def BehaviorProperty :> MemoRequirementElement {
|
|
53
56
|
attribute propertyKind : BehaviorPropertyKind;
|
|
54
57
|
attribute languageKind : PropertyLanguageKind;
|
|
55
58
|
attribute formalExpression : String;
|
|
56
59
|
}
|
|
57
|
-
|
|
60
|
+
// An assume/guarantee contract on one component, AGREE's shape one to one:
|
|
61
|
+
// the component is the `subject`, each assumption an `assume` member and
|
|
62
|
+
// each guarantee a `require` member naming a BehaviorProperty. The subject
|
|
63
|
+
// replaces `contractScope : String`, which named the component in prose
|
|
64
|
+
// and could not be navigated.
|
|
65
|
+
//
|
|
66
|
+
// This is not the procurement contract of a deliverable; that is a
|
|
67
|
+
// different definition.
|
|
68
|
+
requirement def Contract :> MemoRequirementElement {
|
|
69
|
+
subject component : MemoPart;
|
|
70
|
+
}
|
|
58
71
|
// `part def PropertySet specializes VerifiableElement { attribute
|
|
59
72
|
// propertySetScope : String; }` stood here and is DELETED (plan C3,
|
|
60
73
|
// open question §14.6). It was AADL's property-set idea imported as a
|
|
@@ -70,7 +83,12 @@ package memo_architecture_functional_behavior {
|
|
|
70
83
|
// annotate a BASE element rather than declare its own type, the SysML-
|
|
71
84
|
// native answer is `metadata def` + `Metaobjects::SemanticMetadata`, which
|
|
72
85
|
// is what every MEMO relation already carries since A4.
|
|
73
|
-
|
|
86
|
+
// An `action def`: every field it carries — what it does, what goes in and
|
|
87
|
+
// out, its worst-case execution time — describes behaviour. It was a
|
|
88
|
+
// `part def specializes MemoPart`, the same A0 residue `FunctionalFlow`
|
|
89
|
+
// carried, and a behaviour cannot specialize a structure, so nothing could
|
|
90
|
+
// have performed one.
|
|
91
|
+
action def ActivityAction specializes FunctionalAction {
|
|
74
92
|
attribute actionKind : ActionKind;
|
|
75
93
|
attribute inputSummary : String;
|
|
76
94
|
attribute outputSummary : String;
|
|
@@ -84,7 +102,9 @@ package memo_architecture_functional_behavior {
|
|
|
84
102
|
}
|
|
85
103
|
// UI scenarios are OperativeScenario usages with scenarioKind `ui`.
|
|
86
104
|
|
|
87
|
-
|
|
105
|
+
// A timing budget is an obligation on what it measures, so it is a
|
|
106
|
+
// requirement like BehaviorProperty.
|
|
107
|
+
requirement def TimingConstraint :> MemoRequirementElement {
|
|
88
108
|
attribute constraintKind : TimingConstraintKind;
|
|
89
109
|
attribute minMs : String;
|
|
90
110
|
attribute maxMs : String;
|
|
@@ -27,6 +27,23 @@
|
|
|
27
27
|
// project argues in — therapy, alarm, platform, protection. A function can be
|
|
28
28
|
// `sense` in the `protection` category, and a safety case reasons about both.
|
|
29
29
|
//
|
|
30
|
+
// ─── A functional exchange is a flow ─────────────────────────────────────
|
|
31
|
+
//
|
|
32
|
+
// `FunctionalExchange` is an `abstract flow def`, and an exchange is a typed
|
|
33
|
+
// named `flow` between function parameters: the edge IS the exchange. It was
|
|
34
|
+
// a `part def` beside a separate `flow`, with its ends stored as
|
|
35
|
+
// `sourceFunction`/`targetFunction` refs, because a flow could not be the
|
|
36
|
+
// target of an allocation or a trace. A named flow now carries a qualified id
|
|
37
|
+
// that `allocate`, `satisfy` and the rest resolve, so the part reached no
|
|
38
|
+
// rule, query or diagram and existed only to be kept in step with its edge.
|
|
39
|
+
//
|
|
40
|
+
// It is `abstract` because a flow definition specializes the association
|
|
41
|
+
// `Flows::MessageAction`, and a concrete association must declare its two
|
|
42
|
+
// ends (`association-related-types`); here the ends are the usage's
|
|
43
|
+
// parameters. A usage says what it carries through the item type of those
|
|
44
|
+
// parameters, not with `of`: `of` and `: FunctionalExchange` together declare
|
|
45
|
+
// a second `payload`, and a SysML v2 compiler rejects the pair.
|
|
46
|
+
//
|
|
30
47
|
// ─── System function vs. component function ──────────────────────────────
|
|
31
48
|
//
|
|
32
49
|
// ARCADIA's functional chain does not stop at the system boundary: system
|
|
@@ -80,34 +97,20 @@ package memo_architecture_functional_functions {
|
|
|
80
97
|
// component is a responsibility nobody has accepted.
|
|
81
98
|
action def ComponentFunction specializes MemoFunction;
|
|
82
99
|
|
|
83
|
-
//
|
|
84
|
-
//
|
|
85
|
-
//
|
|
86
|
-
//
|
|
87
|
-
// The reason is MEMO's grammar, NOT the language — the earlier wording here
|
|
88
|
-
// said "attributes that a flow usage cannot own", and that was a false
|
|
89
|
-
// claim about SysML v2. The standard's `FlowUsage` is
|
|
90
|
-
// `OccurrenceUsagePrefix 'flow' FlowDeclaration DefinitionBody`
|
|
91
|
-
// (SysML-textual-bnf.kebnf:829), so a conforming flow usage takes a name
|
|
92
|
-
// from its `UsageDeclaration` and owns attributes in its body like any
|
|
93
|
-
// other usage. MEMO's own production is
|
|
94
|
-
// `'flow' 'of' itemType 'from' … 'to' … ';'` — no name, no body — so a
|
|
95
|
-
// MEMO flow can carry neither an `id` nor a latency budget, and nothing
|
|
96
|
-
// can refer to it. Every MEMO element rests on the identification core in
|
|
97
|
-
// memo_core_common, and an anonymous attribute-less edge cannot join it.
|
|
100
|
+
// A transfer between two functions, carrying the budgets and assurance
|
|
101
|
+
// attributes a reader needs on the transfer itself. Authored as a typed
|
|
102
|
+
// named flow from an `out` parameter of one function to an `in` parameter
|
|
103
|
+
// of another:
|
|
98
104
|
//
|
|
99
|
-
//
|
|
100
|
-
//
|
|
101
|
-
//
|
|
102
|
-
|
|
105
|
+
// flow lfFlowCommand : FunctionalExchange
|
|
106
|
+
// from fnManageInfusion.flowCommandOut to fnCommandPump.flowCommandIn {
|
|
107
|
+
// attribute :>> latencyBudgetMs = 20.0;
|
|
108
|
+
// }
|
|
109
|
+
abstract flow def FunctionalExchange {
|
|
103
110
|
attribute flowKind : FlowKind;
|
|
104
111
|
attribute latencyBudgetMs : Real;
|
|
105
112
|
attribute staleAfterMs : Real;
|
|
106
113
|
attribute integrityLevel : String;
|
|
107
|
-
// MemoFunction, not SystemFunction: an exchange between two component
|
|
108
|
-
// functions is the ordinary case once the chain is decomposed.
|
|
109
|
-
ref sourceFunction : MemoFunction[0..1];
|
|
110
|
-
ref targetFunction : MemoFunction[0..1];
|
|
111
114
|
}
|
|
112
115
|
|
|
113
116
|
// A system function enables operational work; it does not perform it.
|
|
@@ -132,14 +135,25 @@ package memo_architecture_functional_functions {
|
|
|
132
135
|
attribute safetyRelevant : Boolean;
|
|
133
136
|
attribute securityRelevant : Boolean;
|
|
134
137
|
}
|
|
135
|
-
action def FunctionalFlowStep
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
138
|
+
// A step is not a definition. `action def FunctionalFlowStep` stood here
|
|
139
|
+
// with `ref function`, `ref exchange` and `ref item exchangedItem`: a
|
|
140
|
+
// wrapper that pointed at the function it stood for. A step is that
|
|
141
|
+
// function performed at one position in the flow, which SysML says
|
|
142
|
+
// directly as an action usage nested in the flow that subsets it:
|
|
143
|
+
//
|
|
144
|
+
// action fcPatientBolus : FunctionalFlow {
|
|
145
|
+
// action fcsBolusCommand :> fnManageInfusion { out item flowCommand :> cdFlowCommand; }
|
|
146
|
+
// action fcsBolusActuate :> fnCommandPump { in item flowCommand :> cdFlowCommand; }
|
|
147
|
+
// first fcsBolusCommand then fcsBolusActuate;
|
|
148
|
+
// flow from fcsBolusCommand.flowCommand to fcsBolusActuate.flowCommand;
|
|
149
|
+
// }
|
|
150
|
+
//
|
|
151
|
+
// Each position keeps its own identity and evidence scope. The exchanged
|
|
152
|
+
// item is a directed parameter of the step, and the exchange a `flow`
|
|
153
|
+
// between two steps' parameters. A step's parameters redefine its
|
|
154
|
+
// function's by position.
|
|
140
155
|
|
|
141
156
|
// `InvolvesFunction` is native `perform` (R10-S6): a `FunctionalFlow`
|
|
142
|
-
//
|
|
143
|
-
//
|
|
144
|
-
// step chain performs its functions directly.
|
|
157
|
+
// performs the function each of its steps subsets, and a flow with no
|
|
158
|
+
// steps performs its functions directly.
|
|
145
159
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// The functional (system) analysis layer as one package.
|
|
2
|
+
//
|
|
3
|
+
// A layer is a namespace of packages: every package whose name begins
|
|
4
|
+
// `memo_architecture_functional_`. This package publicly imports each of them, so
|
|
5
|
+
// `public import memo_architecture_functional::*;` 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_functional {
|
|
11
|
+
public import memo_architecture_functional_behavior::*;
|
|
12
|
+
public import memo_architecture_functional_constraints::*;
|
|
13
|
+
public import memo_architecture_functional_functions::*;
|
|
14
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
// The implementation (software, hardware, user interface) layer as one package.
|
|
2
|
+
//
|
|
3
|
+
// A layer is a namespace of packages: every package whose name begins
|
|
4
|
+
// `memo_architecture_implementation_`. This package publicly imports each of them, so
|
|
5
|
+
// `public import memo_architecture_implementation::*;` 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_implementation {
|
|
11
|
+
public import memo_architecture_implementation_hardware_common::*;
|
|
12
|
+
public import memo_architecture_implementation_hardware_electrical::*;
|
|
13
|
+
public import memo_architecture_implementation_hardware_fluidic::*;
|
|
14
|
+
public import memo_architecture_implementation_hardware_mechanical::*;
|
|
15
|
+
public import memo_architecture_implementation_hardware_optical::*;
|
|
16
|
+
public import memo_architecture_implementation_hardware_sensing::*;
|
|
17
|
+
public import memo_architecture_implementation_hardware_structure::*;
|
|
18
|
+
public import memo_architecture_implementation_software_runtime::*;
|
|
19
|
+
public import memo_architecture_implementation_software_structure::*;
|
|
20
|
+
public import memo_architecture_implementation_ui::*;
|
|
21
|
+
}
|
|
@@ -78,4 +78,11 @@ package memo_architecture_implementation_software_runtime {
|
|
|
78
78
|
// a component belongs to without claiming to describe it.
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
+
// A runtime service or process that exists only because an OTS module is
|
|
82
|
+
// deployed. Optional: a library the product links normally needs only the
|
|
83
|
+
// module.
|
|
84
|
+
part def OTSSoftwareComponent specializes SoftwareComponent {
|
|
85
|
+
ref sourceModule : OTSSoftwareModule[0..1];
|
|
86
|
+
}
|
|
87
|
+
|
|
81
88
|
}
|
|
@@ -24,10 +24,9 @@ package memo_architecture_implementation_software_structure {
|
|
|
24
24
|
// software view inherits it rather than re-declaring it: the code view
|
|
25
25
|
// (SoftwareModule), the runtime view (SoftwareComponent), the system, and
|
|
26
26
|
// the user interface (memo_architecture_implementation_ui::UIElement).
|
|
27
|
-
// Structural software decomposition is part-native.
|
|
28
|
-
//
|
|
29
|
-
//
|
|
30
|
-
// values unambiguous in the model.
|
|
27
|
+
// Structural software decomposition is part-native. The standard's
|
|
28
|
+
// "software item" is this part, not an `item def`: exchanged or stored
|
|
29
|
+
// values are DataItem, below.
|
|
31
30
|
abstract part def SoftwareElement specializes MemoPart {
|
|
32
31
|
attribute safetyClass : SafetyClassKind;
|
|
33
32
|
attribute complexity : ComplexityKind;
|
|
@@ -40,7 +39,8 @@ package memo_architecture_implementation_software_structure {
|
|
|
40
39
|
|
|
41
40
|
// Module-view element (design responsibility). Runtime properties
|
|
42
41
|
// (period, WCET, scheduling) moved to SoftwareComponent.
|
|
43
|
-
// item / unit / package / library / code / firmware
|
|
42
|
+
// item / unit / package / library / code / firmware (IEC 62304). SOUP is
|
|
43
|
+
// a type (SOUPSoftwareModule), not a value here.
|
|
44
44
|
enum def ModuleKind {
|
|
45
45
|
enum 'item';
|
|
46
46
|
enum unit;
|
|
@@ -48,7 +48,6 @@ package memo_architecture_implementation_software_structure {
|
|
|
48
48
|
enum 'library';
|
|
49
49
|
enum code;
|
|
50
50
|
enum firmware;
|
|
51
|
-
enum soup;
|
|
52
51
|
}
|
|
53
52
|
|
|
54
53
|
part def SoftwareModule specializes SoftwareElement {
|
|
@@ -62,12 +61,6 @@ package memo_architecture_implementation_software_structure {
|
|
|
62
61
|
attribute internallyDeveloped : Boolean[0..1];
|
|
63
62
|
attribute firmwareTarget : String[0..1];
|
|
64
63
|
attribute updateMechanism : String[0..1];
|
|
65
|
-
// SOUP (IEC 62304 §8) — set only when moduleKind = soup
|
|
66
|
-
attribute soupVersion : String[0..1];
|
|
67
|
-
attribute soupVendor : String[0..1];
|
|
68
|
-
attribute knownAnomalies : String[0..1];
|
|
69
|
-
attribute riskAcceptance : String[0..1];
|
|
70
|
-
attribute soupClassification : SOUPClassificationKind[0..1];
|
|
71
64
|
}
|
|
72
65
|
|
|
73
66
|
part def Algorithm specializes MemoPart {
|
|
@@ -85,20 +78,68 @@ package memo_architecture_implementation_software_structure {
|
|
|
85
78
|
attribute version : String;
|
|
86
79
|
}
|
|
87
80
|
|
|
88
|
-
//
|
|
89
|
-
|
|
81
|
+
// Data content that may be stored or exchanged through ports. Named
|
|
82
|
+
// DataItem, not SoftwareItem: IEC 62304 uses "software item" for a
|
|
83
|
+
// structural part of a program (a SoftwareElement here), and the item
|
|
84
|
+
// family is the exchanged or stored value.
|
|
85
|
+
abstract item def DataItem specializes MemoItem {
|
|
90
86
|
attribute schemaIdentifier : String;
|
|
91
87
|
attribute schemaVersion : String;
|
|
92
88
|
attribute :>> encoding : String;
|
|
93
89
|
attribute :>> timestampRequired : Boolean;
|
|
94
90
|
}
|
|
95
91
|
|
|
96
|
-
|
|
92
|
+
// SOUP and OTS (IEC 62304 §3.29). The standard's SOUP definition covers
|
|
93
|
+
// off-the-shelf software and also previously developed software that
|
|
94
|
+
// lacks development records, so OTS is the narrower type: every OTS
|
|
95
|
+
// module is SOUP, and SOUP also covers legacy in-house code with no
|
|
96
|
+
// supplier, license or package to record. SOUP is a type, not a
|
|
97
|
+
// module-kind value; the CR-MED-015..017 closure rules apply to it and so
|
|
98
|
+
// to OTS.
|
|
99
|
+
//
|
|
100
|
+
// §8.1.2 (SOUP identification: supplier, version) and §7.1.3 (published
|
|
101
|
+
// anomaly lists) are SOUP obligations, so those attributes sit here; the
|
|
102
|
+
// acquisition identity of a bought or downloaded package sits on
|
|
103
|
+
// OTSSoftwareModule.
|
|
104
|
+
part def SOUPSoftwareModule specializes SoftwareModule {
|
|
105
|
+
attribute supplier : String[0..1];
|
|
106
|
+
attribute version : String[0..1];
|
|
107
|
+
attribute knownAnomalies : String[0..1];
|
|
108
|
+
attribute riskAcceptance : String[0..1];
|
|
109
|
+
attribute soupClassification : SOUPClassificationKind[0..1];
|
|
110
|
+
}
|
|
111
|
+
part def OTSSoftwareModule specializes SOUPSoftwareModule {
|
|
112
|
+
attribute licenseExpression : String;
|
|
113
|
+
attribute packageUrl : String;
|
|
114
|
+
attribute checksum : String;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
enum def SbomFormatKind {
|
|
118
|
+
enum spdx;
|
|
119
|
+
enum cycloneDx;
|
|
120
|
+
enum other;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// An SBOM is a document; its entries are inventory records. An entry
|
|
124
|
+
// names one software element and says what is known about it as shipped.
|
|
125
|
+
// Vulnerabilities, anomalies and risks are separate objects that point at
|
|
126
|
+
// the entry; they are not attributes of the document.
|
|
127
|
+
part def SBOMEntry specializes MemoPart {
|
|
97
128
|
attribute componentName : String;
|
|
98
129
|
attribute version : String;
|
|
99
130
|
attribute supplier : String;
|
|
100
|
-
attribute
|
|
101
|
-
attribute
|
|
131
|
+
attribute licenseExpression : String;
|
|
132
|
+
attribute checksum : String;
|
|
133
|
+
attribute packageUrl : String;
|
|
134
|
+
attribute bomReference : String;
|
|
135
|
+
ref inventoriedElement : SoftwareElement[0..1];
|
|
136
|
+
}
|
|
137
|
+
part def SoftwareBillOfMaterials specializes MemoPart {
|
|
138
|
+
attribute sbomFormat : SbomFormatKind;
|
|
139
|
+
attribute specVersion : String;
|
|
140
|
+
attribute generationTool : String;
|
|
141
|
+
attribute generatedOn : String;
|
|
142
|
+
part sbomEntry : SBOMEntry[0..*];
|
|
102
143
|
}
|
|
103
144
|
|
|
104
145
|
// `ModuleUses` is native `dependency` (R10-S6): write
|
|
@@ -299,7 +299,7 @@ package memo_architecture_implementation_ui {
|
|
|
299
299
|
// `PresentsState` had zero usages anywhere in the tree (R10-S6). Its
|
|
300
300
|
// audited native form, `exhibit state`, does not actually fit: `UIState`
|
|
301
301
|
// is a `part def` with plain string attributes, not a `state def`, and
|
|
302
|
-
//
|
|
302
|
+
// a SysML v2 compiler rejects `exhibit` referencing anything that does not conform to
|
|
303
303
|
// `States::StateAction` ("An exhibit state must reference another
|
|
304
304
|
// state"). Free deletion rather than a migration — nothing referenced
|
|
305
305
|
// it, so nothing to preserve. If `UIState` is ever restructured onto a
|
|
@@ -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
|
+
}
|