@memoarchitect/ontology 0.7.0 → 0.8.24
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 +4 -2
- package/examples/connected-patient-monitor/memo.package.yaml +3 -0
- package/examples/connected-patient-monitor/model/catalog/connected_patient_monitor.sysml +1 -1
- package/examples/connected-patient-monitor/model/catalog/viewpoints/unassigned/views/connected_patient_monitor_overview.sysml +1 -1
- package/examples/embedded-infusion-pump/memo.package.yaml +3 -0
- package/examples/embedded-infusion-pump/model/catalog/embedded_infusion_pump.sysml +8 -6
- package/examples/embedded-infusion-pump/model/catalog/viewpoints/unassigned/views/embedded_infusion_pump_overview.sysml +1 -1
- package/examples/functional-logical-physical/memo.package.yaml +3 -0
- package/examples/functional-logical-physical/model/catalog/functional_logical_physical.sysml +6 -6
- package/examples/functional-logical-physical/model/catalog/viewpoints/unassigned/views/functional_logical_physical_overview.sysml +1 -1
- package/examples/gpca-pump/memo.package.yaml +3 -0
- package/examples/gpca-pump/model/catalog/gpca_analysis.sysml +18 -8
- package/examples/gpca-pump/model/catalog/gpca_architecture.sysml +341 -99
- package/examples/gpca-pump/model/catalog/gpca_behavior_actions.sysml +25 -11
- package/examples/gpca-pump/model/catalog/gpca_behavior_modes.sysml +328 -271
- package/examples/gpca-pump/model/catalog/gpca_behavior_subsystems.sysml +52 -11
- package/examples/gpca-pump/model/catalog/gpca_context.sysml +14 -3
- package/examples/gpca-pump/model/catalog/gpca_cybersecurity.sysml +8 -5
- package/examples/gpca-pump/model/catalog/gpca_interfaces.sysml +175 -259
- package/examples/gpca-pump/model/catalog/gpca_operational.sysml +97 -103
- package/examples/gpca-pump/model/catalog/gpca_physical.sysml +5 -10
- package/examples/gpca-pump/model/catalog/gpca_requirements.sysml +101 -100
- package/examples/gpca-pump/model/catalog/gpca_standards.sysml +161 -0
- package/examples/gpca-pump/model/catalog/gpca_system.sysml +17 -17
- package/examples/gpca-pump/model/catalog/gpca_trace.sysml +274 -334
- package/examples/gpca-pump/model/catalog/gpca_verification.sysml +115 -35
- package/examples/gpca-pump/model/catalog/project.sysml +5 -0
- package/examples/gpca-pump/model/catalog/viewpoints/context/views/context_system_context_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/cybersecurity_cybersecurity_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_cyber_assessment_view.sysml +1 -4
- package/examples/gpca-pump/model/catalog/viewpoints/cybersecurity/views/document_threat_model_view.sysml +2 -5
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_allocation_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/functional/views/functional_function_browser_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/behavior_action_flow_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/document_architecture_description_view.sysml +4 -7
- 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 +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_mode_state_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/logical/views/logical_system_decomposition_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_scenario_sequence_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/operational/views/operational_use_case_view.sysml +2 -4
- package/examples/gpca-pump/model/catalog/viewpoints/physical/views/physical_physical_bom_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/document_dhf_index_view.sysml +5 -8
- package/examples/gpca-pump/model/catalog/viewpoints/requirements/views/requirements_requirements_trace_view.sysml +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_hazard_analysis_view.sysml +6 -6
- package/examples/gpca-pump/model/catalog/viewpoints/risk/views/document_rmf_view.sysml +5 -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 +1 -3
- package/examples/gpca-pump/model/catalog/viewpoints/software/views/document_sdd_view.sysml +2 -5
- 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 +5 -6
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/document_vv_view.sysml +5 -6
- package/examples/gpca-pump/model/catalog/viewpoints/verification/views/verification_verification_coverage_view.sysml +2 -4
- package/examples/ivd-laboratory-system/memo.package.yaml +3 -0
- package/examples/ivd-laboratory-system/model/catalog/ivd_laboratory_system.sysml +1 -1
- package/examples/ivd-laboratory-system/model/catalog/viewpoints/unassigned/views/ivd_laboratory_system_overview.sysml +1 -1
- package/examples/manual-surgical-instrument/memo.package.yaml +3 -0
- package/examples/manual-surgical-instrument/model/catalog/manual_surgical_instrument.sysml +4 -3
- package/examples/manual-surgical-instrument/model/catalog/viewpoints/unassigned/views/manual_surgical_instrument_overview.sysml +1 -1
- package/examples/multidimensional-layers/memo.package.yaml +3 -0
- package/examples/multidimensional-layers/model/catalog/multidimensional_layers.sysml +6 -2
- package/examples/multidimensional-layers/model/catalog/viewpoints/unassigned/views/multidimensional_layers_overview.sysml +0 -1
- package/examples/nested-architecture-dsm/memo.package.yaml +3 -0
- package/examples/nested-architecture-dsm/model/catalog/architecture/functional/functions.sysml +133 -128
- package/examples/nested-architecture-dsm/model/catalog/architecture/logical/structure.sysml +139 -157
- package/examples/nested-architecture-dsm/model/catalog/assurance/verification_validation/verification_validation.sysml +56 -33
- package/examples/nested-architecture-dsm/model/catalog/traces.sysml +25 -26
- package/examples/reusable-instrument/memo.package.yaml +3 -0
- package/examples/reusable-instrument/model/catalog/reusable_instrument.sysml +16 -23
- package/examples/reusable-instrument/model/catalog/viewpoints/unassigned/views/reusable_instrument_overview.sysml +0 -1
- package/examples/ros-mobile-robot/README.md +40 -0
- package/examples/ros-mobile-robot/memo.package.yaml +3 -0
- package/examples/ros-mobile-robot/model/catalog/project.sysml +33 -0
- package/examples/ros-mobile-robot/model/catalog/ros_mobile_robot.sysml +296 -0
- package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/viewpoint.sysml +7 -0
- package/examples/ros-mobile-robot/model/catalog/viewpoints/unassigned/views/ros_mobile_robot_overview.sysml +12 -0
- package/examples/software-only-medical-device/memo.package.yaml +3 -0
- package/examples/software-only-medical-device/model/catalog/project.sysml +4 -0
- package/examples/software-only-medical-device/model/catalog/software_only_medical_device.sysml +12 -6
- package/examples/software-only-medical-device/model/catalog/viewpoints/unassigned/views/software_only_medical_device_overview.sysml +0 -1
- package/examples/surgical-closure-workflow/memo.package.yaml +3 -0
- package/examples/surgical-closure-workflow/model/catalog/surgical_closure_workflow.sysml +58 -75
- package/examples/surgical-closure-workflow/model/catalog/viewpoints/unassigned/views/surgical_closure_workflow_overview.sysml +0 -1
- package/examples/surgical-robot/memo.package.yaml +3 -0
- package/examples/surgical-robot/model/catalog/surgical_robot.sysml +1 -1
- package/examples/surgical-robot/model/catalog/viewpoints/unassigned/views/surgical_robot_overview.sysml +0 -1
- package/examples/sysml-diagram-samples/memo.package.yaml +2 -0
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/action_flow_view.sysml +12 -18
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/context_view.sysml +8 -11
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/functional_flow_view.sysml +43 -68
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/interconnection_view.sysml +57 -68
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/operational_behaviour_view.sysml +40 -70
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/requirements_view.sysml +4 -8
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/standard_activity_view.sysml +1 -20
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/state_transition_view.sysml +52 -84
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/tree_view.sysml +22 -33
- package/examples/sysml-diagram-samples/model/catalog/viewpoints/unassigned/views/use_case_view.sysml +13 -10
- package/examples/temperature-alarm/memo.package.yaml +3 -0
- package/examples/temperature-alarm/model/catalog/temperature_alarm.sysml +28 -25
- package/examples/temperature-alarm/model/catalog/viewpoints/unassigned/views/temperature_alarm_overview.sysml +0 -1
- package/examples/ui-screen-regions/memo.package.yaml +3 -0
- package/examples/ui-screen-regions/model/catalog/architecture/functional/functions.sysml +57 -33
- package/examples/ui-screen-regions/model/catalog/architecture/implementation/ui.sysml +102 -79
- package/examples/ui-screen-regions/model/catalog/assurance/safety_risk/risk.sysml +5 -5
- package/examples/ui-screen-regions/model/catalog/assurance/verification_validation/verification_validation.sysml +21 -6
- package/examples/ui-screen-regions/model/catalog/relationships.sysml +8 -0
- package/examples/ui-screen-regions/model/catalog/traces.sysml +28 -125
- package/examples/ui-screen-regions/model/catalog/viewpoints/functional/views/ui_functional_tree.sysml +2 -3
- 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/viewpoints/ui_layout/views/main_screen_layout.sysml +1 -2
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/settings_screen_layout.sysml +1 -2
- package/examples/ui-screen-regions/model/catalog/viewpoints/ui_layout/views/ui_region_trace.sysml +1 -2
- package/extensions/LICENSES/MIT.txt +19 -0
- package/extensions/README.md +94 -0
- package/extensions/aadl/memo.package.yaml +18 -0
- package/extensions/aadl/src/aadl_extension.sysml +6 -0
- package/extensions/aadl/src/correspondence/memo_aadl_correspondence.sysml +147 -0
- package/extensions/aadl/src/methodology/aadl_methodology.sysml +17 -0
- package/extensions/aadl/src/runtime/memo_aadl_runtime.sysml +56 -0
- package/extensions/cloud/memo.package.yaml +18 -0
- package/extensions/cloud/src/cloud_extension.sysml +44 -0
- package/extensions/cloud/src/methodology/cloud_methodology.sysml +17 -0
- package/extensions/container/memo.package.yaml +18 -0
- package/extensions/container/src/container_extension.sysml +37 -0
- package/extensions/container/src/methodology/container_methodology.sysml +17 -0
- package/extensions/messaging/memo.package.yaml +18 -0
- package/extensions/messaging/src/messaging_extension.sysml +64 -0
- package/extensions/messaging/src/methodology/messaging_methodology.sysml +17 -0
- package/extensions/ros/memo.package.yaml +18 -0
- package/extensions/ros/src/methodology/ros_methodology.sysml +25 -0
- package/extensions/ros/src/ros_extension.sysml +200 -0
- package/extensions/template/src/extension.sysml +37 -0
- package/memo.manifest.yaml +13 -2
- 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 +5 -3
- package/profile/memo.package.yaml +1 -1
- package/src/architecture/decisions/memo_decisions.sysml +23 -2
- package/src/architecture/functional/behavior/memo_behavior.sysml +51 -23
- package/src/architecture/functional/constraints/memo_constraints.sysml +3 -2
- package/src/architecture/functional/functions/memo_functions.sysml +93 -36
- package/src/architecture/implementation/hardware/common/memo_hardware_common.sysml +2 -2
- package/src/architecture/implementation/software/runtime/memo_software_runtime.sysml +46 -22
- package/src/architecture/implementation/software/structure/memo_software_structure.sysml +40 -13
- package/src/architecture/implementation/ui/memo_ui.sysml +83 -43
- package/src/architecture/logical/interfaces/memo_interfaces.sysml +64 -12
- package/src/architecture/logical/structure/memo_logical_structure.sysml +26 -25
- package/src/architecture/operational/activities/memo_activities.sysml +27 -29
- package/src/architecture/operational/context/actors/memo_actors.sysml +8 -10
- package/src/architecture/operational/context/stakeholders/memo_stakeholders.sysml +16 -33
- package/src/architecture/operational/context/use_context/memo_use_context.sysml +42 -17
- package/src/architecture/operational/scenarios/memo_scenarios.sysml +36 -84
- package/src/architecture/operational/structure/memo_operational.sysml +42 -13
- package/src/architecture/operational/use_cases/memo_use_cases.sysml +35 -27
- package/src/architecture/operational/workflows/memo_workflows.sysml +45 -28
- package/src/architecture/realization/deployment/memo_deployment.sysml +115 -20
- package/src/architecture/realization/physical/memo_physical_architecture.sysml +29 -4
- package/src/artifacts/configuration_management/memo_configuration_management.sysml +16 -0
- package/src/artifacts/core/memo_controlled_artifacts.sysml +3 -1
- package/src/artifacts/standards/cfr_21_820.sysml +116 -0
- package/src/artifacts/standards/fda_cybersecurity_2023.sysml +80 -0
- package/src/artifacts/standards/iec_60601_1.sysml +149 -0
- package/src/artifacts/standards/iec_60601_1_2.sysml +56 -0
- package/src/artifacts/standards/iec_60812.sysml +51 -0
- package/src/artifacts/standards/iec_62304.sysml +210 -0
- package/src/artifacts/standards/iec_62366_1.sysml +113 -0
- package/src/artifacts/standards/iec_81001_5_1.sysml +84 -0
- package/src/artifacts/standards/iso_13485.sysml +113 -0
- package/src/artifacts/standards/iso_14971.sysml +94 -0
- package/src/artifacts/standards/iso_iec_ieee_42010.sysml +42 -0
- package/src/artifacts/standards/memo_artifacts_standards_traceability.sysml +132 -0
- package/src/artifacts/templates/dhf/21cfr820/design-input.md +1 -1
- package/src/artifacts/templates/dhf/21cfr820/design-output.md +5 -5
- package/src/artifacts/templates/dhf/21cfr820/design-review.md +1 -1
- package/src/artifacts/templates/dhf/21cfr820/design-validation.md +2 -2
- package/src/artifacts/templates/dhf/21cfr820/design-verification.md +2 -2
- package/src/artifacts/templates/dhf/21cfr820/dhf-index.md +2 -2
- package/src/artifacts/templates/dhf/21cfr820/transfer-plan.md +1 -1
- package/src/artifacts/templates/dhf/21cfr820/user-needs.md +1 -1
- package/src/artifacts/templates/dhf/21cfr820/vv-plan.md +3 -3
- package/src/artifacts/templates/dhf/21cfr820/vv-report.md +4 -4
- package/src/artifacts/templates/dhf/fda-cybersecurity/incident-response.md +1 -1
- package/src/artifacts/templates/dhf/fda-cybersecurity/postmarket-surveillance.md +3 -2
- package/src/artifacts/templates/dhf/fda-cybersecurity/security-arch.md +2 -2
- package/src/artifacts/templates/dhf/fda-cybersecurity/threat-model.md +4 -4
- package/src/artifacts/templates/dhf/fda-cybersecurity/vuln-assessment.md +4 -3
- package/src/artifacts/templates/dhf/iec-60601/hrs.md +170 -0
- package/src/artifacts/templates/dhf/iec-62304/detailed-design.md +1 -1
- package/src/artifacts/templates/dhf/iec-62304/integration-test.md +3 -3
- package/src/artifacts/templates/dhf/iec-62304/sad.md +6 -5
- package/src/artifacts/templates/dhf/iec-62304/sbom.md +3 -2
- package/src/artifacts/templates/dhf/iec-62304/sdp.md +5 -4
- package/src/artifacts/templates/dhf/iec-62304/soup.md +4 -2
- package/src/artifacts/templates/dhf/iec-62304/srs.md +54 -20
- package/src/artifacts/templates/dhf/iec-62304/sw-traceability.md +3 -3
- package/src/artifacts/templates/dhf/iec-62304/system-test.md +1 -1
- package/src/artifacts/templates/dhf/iec-62366/summative-eval.md +1 -1
- package/src/artifacts/templates/dhf/iec-62366/task-analysis.md +40 -4
- package/src/artifacts/templates/dhf/iec-62366/ue-plan.md +1 -1
- package/src/artifacts/templates/dhf/iec-62366/urra.md +3 -3
- package/src/artifacts/templates/dhf/iso-14971/fmea.md +42 -19
- package/src/artifacts/templates/dhf/iso-14971/har.md +3 -3
- package/src/artifacts/templates/dhf/iso-14971/rmp.md +2 -2
- package/src/artifacts/templates/dhf/system/sad.md +173 -0
- package/src/artifacts/templates/dhf/system/standards-checklist.md +87 -0
- package/src/artifacts/templates/dhf/system/standards-traceability.md +125 -0
- package/src/artifacts/templates/dhf/system/syrs.md +128 -0
- package/src/assurance/cybersecurity/memo_cybersecurity.sysml +40 -21
- package/src/assurance/human_factors/memo_human_factors.sysml +29 -22
- package/src/assurance/requirements/memo_requirements.sysml +7 -20
- package/src/assurance/requirements/needs/memo_needs.sysml +1 -1
- package/src/assurance/safety_risk/analysis/memo_fmea.sysml +118 -13
- package/src/assurance/safety_risk/memo_risk.sysml +90 -7
- package/src/assurance/safety_risk/postmarket_surveillance/memo_postmarket_surveillance.sysml +16 -0
- package/src/assurance/verification_validation/memo_assurance.sysml +17 -21
- package/src/core/annotations/memo_annotations.sysml +25 -6
- package/src/core/common/memo_common.sysml +130 -21
- package/src/core/consistency_rules/consistency_rules.sysml +1 -1
- package/src/core/dimensions/dimensions.sysml +12 -0
- package/src/core/enumerations/memo_enumerations.sysml +60 -14
- package/src/core/relationships/memo_relationships.sysml +199 -196
- package/src/memo_namespaces.sysml +30 -0
- package/src/methodology/core/memo_core.sysml +24 -0
- package/src/methodology/profiles/memo_profiles.sysml +1 -1
- package/src/methodology/workflow/memo_workflow.sysml +5 -5
- package/src/rules/closure/closure_rules.sysml +20 -20
- package/src/rules/crosslayer/cross_layer_rules.sysml +2 -2
- package/src/rules/ontology/ontology_invariants.sysml +223 -11
- package/src/rules/quantitative/quantitative_rules.sysml +2 -2
- package/src/viewpoints/catalog/memo_viewpoint_catalog.sysml +30 -30
- 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 +1 -2
- package/src/viewpoints/cybersecurity/cybersecurity_viewpoint.sysml +2 -4
- package/src/viewpoints/definitions/memo_viewpoint_definitions.sysml +46 -3
- package/src/viewpoints/functional/functional_viewpoint.sysml +2 -3
- package/src/viewpoints/functional/views/function_allocation_view/function_allocation_view.sysml +2 -3
- package/src/viewpoints/functional/views/system_functional_tree_view/system_functional_tree_view.sysml +2 -3
- package/src/viewpoints/logical/logical_viewpoint.sysml +1 -2
- package/src/viewpoints/logical/views/logical_architecture_view/logical_architecture_view.sysml +1 -2
- package/src/viewpoints/operational/operational_viewpoint.sysml +2 -3
- package/src/viewpoints/operational/views/use_case_view/use_case_view.sysml +2 -3
- package/src/viewpoints/physical/physical_viewpoint.sysml +1 -2
- package/src/viewpoints/physical/views/network_topology_view/network_topology_view.sysml +1 -2
- package/src/viewpoints/physical/views/physical_bom_view/physical_bom_view.sysml +1 -2
- package/src/viewpoints/requirements/requirements_viewpoint.sysml +1 -2
- package/src/viewpoints/requirements/views/requirements_traceability_view/requirements_traceability_view.sysml +1 -2
- package/src/viewpoints/risk/risk_viewpoint.sysml +1 -2
- package/src/viewpoints/risk/views/risk_chain_view/risk_chain_view.sysml +1 -2
- package/src/viewpoints/software/software_viewpoint.sysml +1 -2
- package/src/viewpoints/software/views/software_architecture_view/software_architecture_view.sysml +1 -2
- package/src/viewpoints/ui_layout/ui_layout_viewpoint.sysml +2 -3
- package/src/viewpoints/usability/usability_viewpoint.sysml +1 -2
- package/src/viewpoints/verification/verification_viewpoint.sysml +2 -3
- package/src/viewpoints/verification/views/verification_coverage_view/verification_coverage_view.sysml +2 -3
- package/templates/connected-device/memo.package.yaml +2 -0
- package/templates/default/memo.package.yaml +2 -0
- package/templates/infusion-pump/memo.package.yaml +2 -0
- package/templates/monitoring-device/memo.package.yaml +2 -0
- package/templates/samd/memo.package.yaml +2 -0
- package/examples/extensions/README.md +0 -16
- package/examples/extensions/template/src/extension.sysml +0 -15
- package/examples/gpca-pump/gpca-pump.kpar +0 -0
- /package/{examples/extensions → extensions}/clinical/memo.package.yaml +0 -0
- /package/{examples/extensions → extensions}/clinical/src/clinical_extension.sysml +0 -0
- /package/{examples/extensions → extensions}/clinical/src/methodology/clinical_methodology.sysml +0 -0
- /package/{examples/extensions → extensions}/clinical/src/procedures/memo_clinical_procedures.sysml +0 -0
- /package/{examples/extensions → extensions}/template/memo.package.yaml +0 -0
|
@@ -10,7 +10,7 @@ package memo_rules_closure {
|
|
|
10
10
|
// ─── Risk Layer Rules ────────────────────────────────────────────────
|
|
11
11
|
|
|
12
12
|
constraint def HazardMitigationRule :> MemoConsistencyRule {
|
|
13
|
-
attribute id = "CR-MED-001";
|
|
13
|
+
attribute :>> id = "CR-MED-001";
|
|
14
14
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
15
15
|
attribute appliesTo = "Hazard";
|
|
16
16
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -20,7 +20,7 @@ package memo_rules_closure {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
constraint def HazardSeverityRule :> MemoConsistencyRule {
|
|
23
|
-
attribute id = "CR-MED-002";
|
|
23
|
+
attribute :>> id = "CR-MED-002";
|
|
24
24
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
25
25
|
attribute appliesTo = "Hazard";
|
|
26
26
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -30,7 +30,7 @@ package memo_rules_closure {
|
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
constraint def RiskControlVerificationRule :> MemoConsistencyRule {
|
|
33
|
-
attribute id = "CR-MED-003";
|
|
33
|
+
attribute :>> id = "CR-MED-003";
|
|
34
34
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
35
35
|
attribute appliesTo = "RiskControlMeasure";
|
|
36
36
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -40,7 +40,7 @@ package memo_rules_closure {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
constraint def InitialRiskMatrixRule :> MemoConsistencyRule {
|
|
43
|
-
attribute id = "CR-MED-004";
|
|
43
|
+
attribute :>> id = "CR-MED-004";
|
|
44
44
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
45
45
|
attribute appliesTo = "Risk";
|
|
46
46
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -52,7 +52,7 @@ package memo_rules_closure {
|
|
|
52
52
|
// ─── Requirements Layer Rules ────────────────────────────────────────
|
|
53
53
|
|
|
54
54
|
constraint def SysReqTraceRule :> MemoConsistencyRule {
|
|
55
|
-
attribute id = "CR-MED-010";
|
|
55
|
+
attribute :>> id = "CR-MED-010";
|
|
56
56
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
57
57
|
attribute appliesTo = "Requirement[requirementKind=system]";
|
|
58
58
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -62,7 +62,7 @@ package memo_rules_closure {
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
constraint def SwReqTraceRule :> MemoConsistencyRule {
|
|
65
|
-
attribute id = "CR-MED-011";
|
|
65
|
+
attribute :>> id = "CR-MED-011";
|
|
66
66
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
67
67
|
attribute appliesTo = "Requirement[requirementKind=software]";
|
|
68
68
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -80,7 +80,7 @@ package memo_rules_closure {
|
|
|
80
80
|
// ─── Architecture Layer Rules ────────────────────────────────────────
|
|
81
81
|
|
|
82
82
|
constraint def SwComponentSafetyClassRule :> MemoConsistencyRule {
|
|
83
|
-
attribute id = "CR-MED-020";
|
|
83
|
+
attribute :>> id = "CR-MED-020";
|
|
84
84
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
85
85
|
attribute appliesTo = "SoftwareModule";
|
|
86
86
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -90,7 +90,7 @@ package memo_rules_closure {
|
|
|
90
90
|
}
|
|
91
91
|
|
|
92
92
|
constraint def SwComponentReqRule :> MemoConsistencyRule {
|
|
93
|
-
attribute id = "CR-MED-021";
|
|
93
|
+
attribute :>> id = "CR-MED-021";
|
|
94
94
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
95
95
|
attribute appliesTo = "SoftwareModule";
|
|
96
96
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -100,7 +100,7 @@ package memo_rules_closure {
|
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
constraint def LogicalFunctionAllocationRule :> MemoConsistencyRule {
|
|
103
|
-
attribute id = "CR-MED-022";
|
|
103
|
+
attribute :>> id = "CR-MED-022";
|
|
104
104
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
105
105
|
attribute appliesTo = "SystemFunction";
|
|
106
106
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -112,7 +112,7 @@ package memo_rules_closure {
|
|
|
112
112
|
// ─── Verification Layer Rules ────────────────────────────────────────
|
|
113
113
|
|
|
114
114
|
constraint def VerificationCaseMethodRule :> MemoConsistencyRule {
|
|
115
|
-
attribute id = "CR-MED-030";
|
|
115
|
+
attribute :>> id = "CR-MED-030";
|
|
116
116
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
117
117
|
attribute appliesTo = "VerificationCase";
|
|
118
118
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -122,7 +122,7 @@ package memo_rules_closure {
|
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
constraint def VerificationCaseTargetRule :> MemoConsistencyRule {
|
|
125
|
-
attribute id = "CR-MED-031";
|
|
125
|
+
attribute :>> id = "CR-MED-031";
|
|
126
126
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
127
127
|
attribute appliesTo = "VerificationCase";
|
|
128
128
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -132,7 +132,7 @@ package memo_rules_closure {
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
constraint def EvidenceProductionRule :> MemoConsistencyRule {
|
|
135
|
-
attribute id = "CR-MED-032";
|
|
135
|
+
attribute :>> id = "CR-MED-032";
|
|
136
136
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
137
137
|
attribute appliesTo = "VerificationCase";
|
|
138
138
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -144,7 +144,7 @@ package memo_rules_closure {
|
|
|
144
144
|
// ─── Cybersecurity Layer Rules ───────────────────────────────────────
|
|
145
145
|
|
|
146
146
|
constraint def ThreatMitigationRule :> MemoConsistencyRule {
|
|
147
|
-
attribute id = "CR-MED-040";
|
|
147
|
+
attribute :>> id = "CR-MED-040";
|
|
148
148
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
149
149
|
attribute appliesTo = "Threat";
|
|
150
150
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -154,7 +154,7 @@ package memo_rules_closure {
|
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
constraint def AssetThreatLinkRule :> MemoConsistencyRule {
|
|
157
|
-
attribute id = "CR-MED-041";
|
|
157
|
+
attribute :>> id = "CR-MED-041";
|
|
158
158
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
159
159
|
attribute appliesTo = "CybersecurityAsset";
|
|
160
160
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -166,7 +166,7 @@ package memo_rules_closure {
|
|
|
166
166
|
// ─── Interface Rules ─────────────────────────────────────────────────
|
|
167
167
|
|
|
168
168
|
constraint def LogicalInterfaceDirectionRule :> MemoConsistencyRule {
|
|
169
|
-
attribute id = "CR-MED-050";
|
|
169
|
+
attribute :>> id = "CR-MED-050";
|
|
170
170
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
171
171
|
attribute appliesTo = "Interface";
|
|
172
172
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -178,7 +178,7 @@ package memo_rules_closure {
|
|
|
178
178
|
// ─── Conditional Rules ───────────────────────────────────────────────
|
|
179
179
|
|
|
180
180
|
constraint def SafetyClassCVerificationRule :> MemoConsistencyRule {
|
|
181
|
-
attribute id = "CR-MED-101";
|
|
181
|
+
attribute :>> id = "CR-MED-101";
|
|
182
182
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
183
183
|
attribute appliesTo = "SoftwareModule";
|
|
184
184
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -203,7 +203,7 @@ package memo_rules_closure {
|
|
|
203
203
|
// triggers. Chrome must be DECLARED `decoration`; an element left
|
|
204
204
|
// unclassified fails rather than passing as scenery.
|
|
205
205
|
constraint def UiElementDesignRecordRule :> MemoConsistencyRule {
|
|
206
|
-
attribute id = "CR-MED-110";
|
|
206
|
+
attribute :>> id = "CR-MED-110";
|
|
207
207
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
208
208
|
attribute appliesTo = "UIElement";
|
|
209
209
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -217,7 +217,7 @@ package memo_rules_closure {
|
|
|
217
217
|
// The interactive-form restriction lives in the predicate because it spans
|
|
218
218
|
// several enum values.
|
|
219
219
|
constraint def ControlInvokesFunctionRule :> MemoConsistencyRule {
|
|
220
|
-
attribute id = "CR-MED-111";
|
|
220
|
+
attribute :>> id = "CR-MED-111";
|
|
221
221
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
222
222
|
attribute appliesTo = "UIElement";
|
|
223
223
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -230,7 +230,7 @@ package memo_rules_closure {
|
|
|
230
230
|
// unconfirmed machine guess must never reach a design review looking like
|
|
231
231
|
// an engineering decision.
|
|
232
232
|
constraint def BoundsDetectionConfirmedRule :> MemoConsistencyRule {
|
|
233
|
-
attribute id = "CR-MED-112";
|
|
233
|
+
attribute :>> id = "CR-MED-112";
|
|
234
234
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
235
235
|
attribute appliesTo = "UIElement";
|
|
236
236
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -242,7 +242,7 @@ package memo_rules_closure {
|
|
|
242
242
|
// A screenshot with no build behind it is undated design intent, not
|
|
243
243
|
// evidence of what the device does.
|
|
244
244
|
constraint def ScreenCaptureProvenanceRule :> MemoConsistencyRule {
|
|
245
|
-
attribute id = "CR-MED-113";
|
|
245
|
+
attribute :>> id = "CR-MED-113";
|
|
246
246
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
247
247
|
attribute appliesTo = "ScreenCapture";
|
|
248
248
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -7,7 +7,7 @@ package memo_rules_crosslayer {
|
|
|
7
7
|
private import memo_core_enumerations::*;
|
|
8
8
|
|
|
9
9
|
constraint def RiskToReqTraceRule :> MemoConsistencyRule {
|
|
10
|
-
attribute id = "XL-001";
|
|
10
|
+
attribute :>> id = "XL-001";
|
|
11
11
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
12
12
|
attribute appliesTo = "Hazard";
|
|
13
13
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -17,7 +17,7 @@ package memo_rules_crosslayer {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
constraint def ReqToArchTraceRule :> MemoConsistencyRule {
|
|
20
|
-
attribute id = "XL-002";
|
|
20
|
+
attribute :>> id = "XL-002";
|
|
21
21
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
22
22
|
attribute appliesTo = "Requirement[requirementKind=system]";
|
|
23
23
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -12,7 +12,7 @@ package memo_rules_ontology {
|
|
|
12
12
|
// ─── Structure ───────────────────────────────────────────────────────
|
|
13
13
|
|
|
14
14
|
constraint def ContainmentAcyclicRule :> MemoConsistencyRule {
|
|
15
|
-
attribute id = "CR-ONT-001";
|
|
15
|
+
attribute :>> id = "CR-ONT-001";
|
|
16
16
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
17
17
|
attribute appliesTo = "Model";
|
|
18
18
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -21,7 +21,7 @@ package memo_rules_ontology {
|
|
|
21
21
|
constraint { true }
|
|
22
22
|
}
|
|
23
23
|
constraint def NestedPartConnectedRule :> MemoConsistencyRule {
|
|
24
|
-
attribute id = "AR-IBD-001";
|
|
24
|
+
attribute :>> id = "AR-IBD-001";
|
|
25
25
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
26
26
|
// Internal-block connectivity is a structural-architecture concern, so
|
|
27
27
|
// the subject is the structural component — not every MemoPart. UI
|
|
@@ -44,7 +44,7 @@ package memo_rules_ontology {
|
|
|
44
44
|
// ─── Deployment and realization ──────────────────────────────────────
|
|
45
45
|
|
|
46
46
|
constraint def RuntimeTracesToModuleRule :> MemoConsistencyRule {
|
|
47
|
-
attribute id = "CR-ONT-011";
|
|
47
|
+
attribute :>> id = "CR-ONT-011";
|
|
48
48
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
49
49
|
attribute appliesTo = "SoftwareComponent";
|
|
50
50
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -53,7 +53,7 @@ package memo_rules_ontology {
|
|
|
53
53
|
constraint { true }
|
|
54
54
|
}
|
|
55
55
|
constraint def PatientContactCharacterizedRule :> MemoConsistencyRule {
|
|
56
|
-
attribute id = "CR-ONT-032";
|
|
56
|
+
attribute :>> id = "CR-ONT-032";
|
|
57
57
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
58
58
|
attribute appliesTo = "PhysicalComponent";
|
|
59
59
|
attribute severity = RuleSeverityKind::error;
|
|
@@ -65,25 +65,25 @@ package memo_rules_ontology {
|
|
|
65
65
|
// ─── Assurance coverage ──────────────────────────────────────────────
|
|
66
66
|
|
|
67
67
|
constraint def SafetyCriticalFunctionVerifiedRule :> MemoConsistencyRule {
|
|
68
|
-
attribute id = "CR-ONT-040";
|
|
68
|
+
attribute :>> id = "CR-ONT-040";
|
|
69
69
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
70
|
-
attribute appliesTo = "
|
|
70
|
+
attribute appliesTo = "MemoFunction";
|
|
71
71
|
attribute severity = RuleSeverityKind::error;
|
|
72
72
|
attribute rationaleText = "Safety-critical functions (criticality high or catastrophic) must trace to at least one verification case.";
|
|
73
73
|
attribute predicateExpression = "not(criticality == 'high' or criticality == 'catastrophic') or verifiedBy->size() >= 1";
|
|
74
74
|
constraint { true }
|
|
75
75
|
}
|
|
76
76
|
constraint def CriticalTaskValidatedRule :> MemoConsistencyRule {
|
|
77
|
-
attribute id = "CR-ONT-041";
|
|
77
|
+
attribute :>> id = "CR-ONT-041";
|
|
78
78
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
79
|
-
attribute appliesTo = "
|
|
79
|
+
attribute appliesTo = "OperativeAction[criticality=high]";
|
|
80
80
|
attribute severity = RuleSeverityKind::error;
|
|
81
81
|
attribute rationaleText = "Critical tasks (criticality high or catastrophic) must trace to usability validation (FDA HF guidance; IEC 62366-1 summative evaluation).";
|
|
82
82
|
attribute predicateExpression = "not(criticality == 'high' or criticality == 'catastrophic') or validates->size() >= 1";
|
|
83
83
|
constraint { true }
|
|
84
84
|
}
|
|
85
85
|
constraint def UseErrorTracesToHazardRule :> MemoConsistencyRule {
|
|
86
|
-
attribute id = "CR-ONT-042";
|
|
86
|
+
attribute :>> id = "CR-ONT-042";
|
|
87
87
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
88
88
|
attribute appliesTo = "UseError";
|
|
89
89
|
attribute severity = RuleSeverityKind::warning;
|
|
@@ -91,10 +91,222 @@ package memo_rules_ontology {
|
|
|
91
91
|
attribute predicateExpression = "not(severity == 'serious' or severity == 'critical' or severity == 'catastrophic') or causes->size() >= 1 or tracesRisk->size() >= 1";
|
|
92
92
|
constraint { true }
|
|
93
93
|
}
|
|
94
|
+
// ─── Relation end conformance (Track A0) ─────────────────────────────
|
|
95
|
+
//
|
|
96
|
+
// These rules carry the constraints that `connection def` end TYPES used to
|
|
97
|
+
// carry in memo_core_relationships. The types had to go: KerML forbids a
|
|
98
|
+
// port or a behaviour from specializing a part-based type, so a
|
|
99
|
+
// `MemoPart`-typed end forced every endpoint to be a part — which is why
|
|
100
|
+
// ports are part defs, why a function is a part with its behaviour stapled
|
|
101
|
+
// on, and why `allocate <function> to <actor>` is rejected. See the Track A0
|
|
102
|
+
// note at the top of memo_core_relationships.
|
|
103
|
+
//
|
|
104
|
+
// Each rule states what its end stated, in the one vocabulary that survives
|
|
105
|
+
// the metaclass split:
|
|
106
|
+
//
|
|
107
|
+
// * `conformsTo(Base)` — SysML specialization against a MEMO base. This is
|
|
108
|
+
// the part the end type expressed, and it still works within a metaclass.
|
|
109
|
+
// * `construct == 'action' | 'port' | 'state' | …` — the SysML METACLASS.
|
|
110
|
+
// No MEMO base can say this, because the bases are per-metaclass by
|
|
111
|
+
// construction; a type-based end could only ever admit one of them.
|
|
112
|
+
//
|
|
113
|
+
// Several of these are WIDER than the end they replace, and deliberately so:
|
|
114
|
+
// the ends were being violated by content that already shipped. `composes`
|
|
115
|
+
// was typed MemoPart/MemoPart and links StateMachine (a state def) to
|
|
116
|
+
// OperativeAction (an action def); `verifiedBy`'s source was typed MemoPart and
|
|
117
|
+
// most of its sources are requirement defs; `precedes` was typed
|
|
118
|
+
// a part-only type and joins OperativeAction to OperativeAction.
|
|
119
|
+
// A rule that reproduced the old type exactly would have failed on the
|
|
120
|
+
// flagship example on the day it landed. What each rule asserts is the
|
|
121
|
+
// constraint the end MEANT, stated so it can be checked.
|
|
122
|
+
//
|
|
123
|
+
// Subject scope is `Model`, following CR-ONT-001: a statement about the ends
|
|
124
|
+
// of a relation quantifies over its LINKS, not over elements of one kind, so
|
|
125
|
+
// no per-element subject can reach it. The cost is that a violation names
|
|
126
|
+
// the rule and not the offending link; the rationale text names the relation
|
|
127
|
+
// and the admissible types so the report is still actionable.
|
|
128
|
+
|
|
129
|
+
constraint def SatisfiedBySourceKindRule :> MemoConsistencyRule {
|
|
130
|
+
attribute :>> id = "CR-ONT-060";
|
|
131
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
132
|
+
attribute appliesTo = "Model";
|
|
133
|
+
attribute severity = RuleSeverityKind::error;
|
|
134
|
+
attribute rationaleText = "Only a requirement or a need is satisfied by something. The source end of SatisfiedBy must conform to MemoRequirementElement.";
|
|
135
|
+
attribute predicateExpression = "sourcesOf(satisfiedBy)->forAll(conformsTo(MemoRequirementElement))";
|
|
136
|
+
constraint { true }
|
|
137
|
+
}
|
|
138
|
+
constraint def SatisfiedByTargetKindRule :> MemoConsistencyRule {
|
|
139
|
+
attribute :>> id = "CR-ONT-061";
|
|
140
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
141
|
+
attribute appliesTo = "Model";
|
|
142
|
+
attribute severity = RuleSeverityKind::error;
|
|
143
|
+
attribute rationaleText = "A requirement is satisfied by a designed part, a behaviour, or a port. Never by another requirement or by a document.";
|
|
144
|
+
attribute predicateExpression = "targetsOf(satisfiedBy)->forAll(conformsTo(MemoPart) or construct == 'action' or construct == 'port')";
|
|
145
|
+
constraint { true }
|
|
146
|
+
}
|
|
147
|
+
constraint def VerifiedByTargetKindRule :> MemoConsistencyRule {
|
|
148
|
+
attribute :>> id = "CR-ONT-062";
|
|
149
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
150
|
+
attribute appliesTo = "Model";
|
|
151
|
+
attribute severity = RuleSeverityKind::error;
|
|
152
|
+
attribute rationaleText = "A verification case verifies a requirement, a risk control, an architecture element, a behaviour, or a port — something a test can be run against. Not a view, not an evidence record.";
|
|
153
|
+
attribute predicateExpression = "sourcesOf(verifiedBy)->forAll(conformsTo(MemoPart) or construct == 'requirement' or construct == 'action' or construct == 'port')";
|
|
154
|
+
constraint { true }
|
|
155
|
+
}
|
|
156
|
+
constraint def AllocatedToSourceKindRule :> MemoConsistencyRule {
|
|
157
|
+
attribute :>> id = "CR-ONT-063";
|
|
158
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
159
|
+
attribute appliesTo = "Model";
|
|
160
|
+
attribute severity = RuleSeverityKind::error;
|
|
161
|
+
attribute rationaleText = "Allocation runs from a function or a behaviour to where it runs. The source end of AllocatedTo is a part or an action.";
|
|
162
|
+
attribute predicateExpression = "sourcesOf(allocatedTo)->forAll(conformsTo(MemoPart) or construct == 'action')";
|
|
163
|
+
constraint { true }
|
|
164
|
+
}
|
|
165
|
+
constraint def AllocatedToTargetKindRule :> MemoConsistencyRule {
|
|
166
|
+
attribute :>> id = "CR-ONT-064";
|
|
167
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
168
|
+
attribute appliesTo = "Model";
|
|
169
|
+
attribute severity = RuleSeverityKind::error;
|
|
170
|
+
attribute rationaleText = "A function is allocated to a part — including a system or actor — as ARCADIA System Analysis requires.";
|
|
171
|
+
attribute predicateExpression = "targetsOf(allocatedTo)->forAll(conformsTo(MemoPart))";
|
|
172
|
+
constraint { true }
|
|
173
|
+
}
|
|
174
|
+
constraint def ComposesParentKindRule :> MemoConsistencyRule {
|
|
175
|
+
attribute :>> id = "CR-ONT-065";
|
|
176
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
177
|
+
attribute appliesTo = "Model";
|
|
178
|
+
attribute severity = RuleSeverityKind::error;
|
|
179
|
+
attribute rationaleText = "A whole in a decomposition is a part, a behaviour, or a state machine. A requirement does not compose anything.";
|
|
180
|
+
attribute predicateExpression = "sourcesOf(composes)->forAll(conformsTo(MemoPart) or construct == 'action' or construct == 'state')";
|
|
181
|
+
constraint { true }
|
|
182
|
+
}
|
|
183
|
+
constraint def ComposesChildKindRule :> MemoConsistencyRule {
|
|
184
|
+
attribute :>> id = "CR-ONT-066";
|
|
185
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
186
|
+
attribute appliesTo = "Model";
|
|
187
|
+
attribute severity = RuleSeverityKind::error;
|
|
188
|
+
attribute rationaleText = "A part in a decomposition is a part, a behaviour, a state, or a port — a component owns its ports, and a workflow owns its steps.";
|
|
189
|
+
attribute predicateExpression = "targetsOf(composes)->forAll(conformsTo(MemoPart) or construct == 'action' or construct == 'state' or construct == 'port')";
|
|
190
|
+
constraint { true }
|
|
191
|
+
}
|
|
192
|
+
constraint def PrecedesEndKindRule :> MemoConsistencyRule {
|
|
193
|
+
attribute :>> id = "CR-ONT-067";
|
|
194
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
195
|
+
attribute appliesTo = "Model";
|
|
196
|
+
attribute severity = RuleSeverityKind::error;
|
|
197
|
+
attribute rationaleText = "Precedence orders things that happen: parts or behaviours, at both ends.";
|
|
198
|
+
attribute predicateExpression = "sourcesOf(precedes)->forAll(conformsTo(MemoPart) or construct == 'action') and targetsOf(precedes)->forAll(conformsTo(MemoPart) or construct == 'action')";
|
|
199
|
+
constraint { true }
|
|
200
|
+
}
|
|
201
|
+
constraint def PerformsPerformerKindRule :> MemoConsistencyRule {
|
|
202
|
+
attribute :>> id = "CR-ONT-068";
|
|
203
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
204
|
+
attribute appliesTo = "Model";
|
|
205
|
+
attribute severity = RuleSeverityKind::error;
|
|
206
|
+
attribute rationaleText = "A performer is an operational entity, an actor, or a system action — a part or a behaviour. The end's own documentation said 'or system action' while its MemoPart type forbade one.";
|
|
207
|
+
attribute predicateExpression = "sourcesOf(performs)->forAll(conformsTo(MemoPart) or construct == 'action')";
|
|
208
|
+
constraint { true }
|
|
209
|
+
}
|
|
210
|
+
constraint def EnablesEnablerKindRule :> MemoConsistencyRule {
|
|
211
|
+
attribute :>> id = "CR-ONT-069";
|
|
212
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
213
|
+
attribute appliesTo = "Model";
|
|
214
|
+
attribute severity = RuleSeverityKind::error;
|
|
215
|
+
attribute rationaleText = "An enabling system or function enables a workflow: the enabling end is a part or a behaviour.";
|
|
216
|
+
attribute predicateExpression = "sourcesOf(enables)->forAll(conformsTo(MemoPart) or construct == 'action')";
|
|
217
|
+
constraint { true }
|
|
218
|
+
}
|
|
219
|
+
constraint def BindsToInterfaceEndKindRule :> MemoConsistencyRule {
|
|
220
|
+
attribute :>> id = "CR-ONT-070";
|
|
221
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
222
|
+
attribute appliesTo = "Model";
|
|
223
|
+
attribute severity = RuleSeverityKind::error;
|
|
224
|
+
attribute rationaleText = "A port binds to an interface. The bound end is an interface definition, which the former InterfaceElement-typed end could not hold at all — Interface specializes MemoInterface, an interface def, not a part.";
|
|
225
|
+
attribute predicateExpression = "sourcesOf(bindsToInterface)->forAll(conformsTo(InterfaceElement) or construct == 'port') and targetsOf(bindsToInterface)->forAll(conformsTo(InterfaceElement) or construct == 'interface' or construct == 'port')";
|
|
226
|
+
constraint { true }
|
|
227
|
+
}
|
|
228
|
+
constraint def CrossesTrustBoundaryEndKindRule :> MemoConsistencyRule {
|
|
229
|
+
attribute :>> id = "CR-ONT-071";
|
|
230
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
231
|
+
attribute appliesTo = "Model";
|
|
232
|
+
attribute severity = RuleSeverityKind::error;
|
|
233
|
+
attribute rationaleText = "A boundary is a boundary element or a port; what crosses it is an asset or an exchange item.";
|
|
234
|
+
attribute predicateExpression = "sourcesOf(crossesTrustBoundary)->forAll(conformsTo(InterfaceElement) or construct == 'port') and targetsOf(crossesTrustBoundary)->forAll(conformsTo(MemoPart) or construct == 'item')";
|
|
235
|
+
constraint { true }
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// CR-ONT-002's replacement. ComponentExchange's endpoints are `ref`
|
|
239
|
+
// features, not links, and the builder projects them as element-ID STRINGS
|
|
240
|
+
// in the attribute map (a §13.3 string pseudo-reference) — so they cannot be
|
|
241
|
+
// reached with sourcesOf/targetsOf. They are resolved here by looking the id
|
|
242
|
+
// up in the kind extent, which is the same statement made the long way.
|
|
243
|
+
constraint def ComponentExchangeSourceEndpointKindRule :> MemoConsistencyRule {
|
|
244
|
+
attribute :>> id = "CR-ONT-072";
|
|
245
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
246
|
+
attribute appliesTo = "ComponentExchange";
|
|
247
|
+
attribute severity = RuleSeverityKind::error;
|
|
248
|
+
attribute rationaleText = "An exchange starts at a component or at a boundary port. Stating it as a rule is what let the endpoint refs stop being MemoPart-typed, which is what lets PhysicalPort and SoftwarePort become port defs.";
|
|
249
|
+
attribute predicateExpression = "attributes.sourceEndpoint == '' or allOfKind('MemoPart')->exists(id == subject.attributes.sourceEndpoint) or allOfKind('InterfaceElement')->exists(id == subject.attributes.sourceEndpoint) or allOfKind('MemoPort')->exists(id == subject.attributes.sourceEndpoint)";
|
|
250
|
+
constraint { true }
|
|
251
|
+
}
|
|
252
|
+
constraint def ComponentExchangeTargetEndpointKindRule :> MemoConsistencyRule {
|
|
253
|
+
attribute :>> id = "CR-ONT-073";
|
|
254
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
255
|
+
attribute appliesTo = "ComponentExchange";
|
|
256
|
+
attribute severity = RuleSeverityKind::error;
|
|
257
|
+
attribute rationaleText = "An exchange ends at a component or at a boundary port, on the same grounds as CR-ONT-072.";
|
|
258
|
+
attribute predicateExpression = "attributes.targetEndpoint == '' or allOfKind('MemoPart')->exists(id == subject.attributes.targetEndpoint) or allOfKind('InterfaceElement')->exists(id == subject.attributes.targetEndpoint) or allOfKind('MemoPort')->exists(id == subject.attributes.targetEndpoint)";
|
|
259
|
+
constraint { true }
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// ─── The functional chain ────────────────────────────────────────────
|
|
263
|
+
//
|
|
264
|
+
// What makes ComponentFunction a definition of its own rather than an enum
|
|
265
|
+
// member on SystemFunction. An enum value cannot change a multiplicity, and
|
|
266
|
+
// "answerable to exactly one component" is the whole content of the concept.
|
|
267
|
+
|
|
268
|
+
constraint def ComponentFunctionAllocatedRule :> MemoConsistencyRule {
|
|
269
|
+
attribute :>> id = "CR-ONT-074";
|
|
270
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
271
|
+
attribute appliesTo = "ComponentFunction";
|
|
272
|
+
attribute severity = RuleSeverityKind::error;
|
|
273
|
+
attribute rationaleText = "A component function is the responsibility of exactly one component, and AllocatedTo is what names it. A component function allocated nowhere is a responsibility nobody has accepted; one allocated twice is a responsibility nobody owns. A system-level responsibility with no single owner is a SystemFunction, which allows that.";
|
|
274
|
+
attribute predicateExpression = "allocatedTo->size() == 1";
|
|
275
|
+
constraint { true }
|
|
276
|
+
}
|
|
277
|
+
constraint def FunctionDecomposesIntoFunctionsRule :> MemoConsistencyRule {
|
|
278
|
+
attribute :>> id = "CR-ONT-075";
|
|
279
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
280
|
+
attribute appliesTo = "MemoFunction";
|
|
281
|
+
attribute severity = RuleSeverityKind::error;
|
|
282
|
+
attribute rationaleText = "The functional chain decomposes functions into functions. A function composed of a component, or owned by one, is confusing allocation with decomposition — the component is named by AllocatedTo, never by Composes.";
|
|
283
|
+
attribute predicateExpression = "composes->forAll(conformsTo(MemoFunction))";
|
|
284
|
+
constraint { true }
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// Track A3. The flow is the edge; the exchange part carries the budget and
|
|
288
|
+
// assurance attributes. The two halves are bound by a SHARED NAME — the flow
|
|
289
|
+
// usage is named with its exchange — and this is what makes that binding a
|
|
290
|
+
// checked fact rather than a convention someone can quietly break.
|
|
291
|
+
//
|
|
292
|
+
// It needs `linksOf`, because the question is about a link's IDENTITY, not
|
|
293
|
+
// about what sits at its ends: `sourcesOf`/`targetsOf` yield the elements at
|
|
294
|
+
// the ends and can never answer it. Naming the flow is what the grammar's
|
|
295
|
+
// restored FlowDeclaration name makes possible at all.
|
|
296
|
+
constraint def ExchangeHasFlowRule :> MemoConsistencyRule {
|
|
297
|
+
attribute :>> id = "CR-ONT-076";
|
|
298
|
+
attribute tailoring = RuleTailoringKind::invariant;
|
|
299
|
+
attribute appliesTo = "ComponentExchange";
|
|
300
|
+
attribute severity = RuleSeverityKind::error;
|
|
301
|
+
attribute rationaleText = "An exchange states that something crosses a boundary, which is an EDGE, and the edge is a native flow. The part def exists for the budget and assurance attributes a reader has to find from the edge, so the two are named alike and this rule holds them together. An exchange with no flow is a budget attached to nothing.";
|
|
302
|
+
attribute predicateExpression = "linksOf(flow)->exists(id == subject.id)";
|
|
303
|
+
constraint { true }
|
|
304
|
+
}
|
|
305
|
+
|
|
94
306
|
constraint def AlternateScenarioHasBaseRule :> MemoConsistencyRule {
|
|
95
|
-
attribute id = "CR-ONT-043";
|
|
307
|
+
attribute :>> id = "CR-ONT-043";
|
|
96
308
|
attribute tailoring = RuleTailoringKind::invariant;
|
|
97
|
-
attribute appliesTo = "
|
|
309
|
+
attribute appliesTo = "OperativeScenario";
|
|
98
310
|
attribute severity = RuleSeverityKind::error;
|
|
99
311
|
attribute rationaleText = "Alternate, exception, and recovery scenarios must identify their base scenario or variation point — never duplicate the workflow.";
|
|
100
312
|
attribute predicateExpression = "not(variantKind == 'alternate' or variantKind == 'exception' or variantKind == 'recovery') or baseScenario->size() == 1 or variationPoint != ''";
|
|
@@ -7,7 +7,7 @@ package memo_rules_quantitative {
|
|
|
7
7
|
private import memo_core_enumerations::*;
|
|
8
8
|
|
|
9
9
|
constraint def HazardMaxControlsRule :> MemoConsistencyRule {
|
|
10
|
-
attribute id = "QT-001";
|
|
10
|
+
attribute :>> id = "QT-001";
|
|
11
11
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
12
12
|
attribute appliesTo = "Hazard";
|
|
13
13
|
attribute severity = RuleSeverityKind::info;
|
|
@@ -17,7 +17,7 @@ package memo_rules_quantitative {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
constraint def SwComponentMaxInterfacesRule :> MemoConsistencyRule {
|
|
20
|
-
attribute id = "QT-002";
|
|
20
|
+
attribute :>> id = "QT-002";
|
|
21
21
|
attribute tailoring = RuleTailoringKind::assurance;
|
|
22
22
|
attribute appliesTo = "SoftwareModule";
|
|
23
23
|
attribute severity = RuleSeverityKind::info;
|