From 432360485391cfa37588624891bb367f7312f083 Mon Sep 17 00:00:00 2001 From: ambujsingh Date: Mon, 13 Jul 2026 15:52:23 +0530 Subject: [PATCH] [rules score] refactor requirements model to use abstract base types Replace inline union types with abstract base types in the TRLC requirements model for cleaner polymorphism and extensibility: - Add abstract CompReqSource; AssumedSystemReq/FeatReq extend it and CompReqSourceId.item references the base instead of [FeatReq, AssumedSystemReq]. - Add abstract Measure; ControlMeasure/PreventiveMeasure/Mitigation extend it, replacing the tuple Measure union. - Root PreventiveMeasure and Mitigation in RequirementSafety (fixing Mitigation's incorrect AssumedSystemReq parent and PreventiveMeasure having no safety classification). - Drop mitigates from ControlMeasure (tracing is implicit via FTA name-matching); keep mitigates on AoU; give Mitigation an optional rationale. - Add mandatory safety/description/version to the SomePreventiveMeasure test fixture, which the new hierarchy now requires. --- .../seooc_test/safety_measures_fixtures.trlc | 3 ++ .../trlc/config/score_requirements_model.rsl | 30 +++++++++---------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/bazel/rules/rules_score/test/fixtures/seooc_test/safety_measures_fixtures.trlc b/bazel/rules/rules_score/test/fixtures/seooc_test/safety_measures_fixtures.trlc index c81da33e..e42fe2ca 100644 --- a/bazel/rules/rules_score/test/fixtures/seooc_test/safety_measures_fixtures.trlc +++ b/bazel/rules/rules_score/test/fixtures/seooc_test/safety_measures_fixtures.trlc @@ -29,6 +29,9 @@ ScoreReq.ControlMeasure SomeBasicEvent { } ScoreReq.PreventiveMeasure SomePreventiveMeasure { + safety = ScoreReq.Asil.B + description = "A preventive measure that stops a failure mode from occurring (no mitigates field)" + version = 1 } ScoreReq.Mitigation SomeMitigation { diff --git a/bazel/rules/rules_score/trlc/config/score_requirements_model.rsl b/bazel/rules/rules_score/trlc/config/score_requirements_model.rsl index 3a2d44ce..67ae8959 100644 --- a/bazel/rules/rules_score/trlc/config/score_requirements_model.rsl +++ b/bazel/rules/rules_score/trlc/config/score_requirements_model.rsl @@ -44,11 +44,14 @@ abstract type RequirementSafety "Extension of Requirement that carries an ASIL c Asil } +abstract type CompReqSource "Base type for requirements that may serve as a source for a component requirement." extends RequirementSafety { +} + /////////////////////////////// // S-Core Requirements Model /////////////////////////////// -type AssumedSystemReq "System-level requirement received from the wider operational context (e.g. platform)." extends RequirementSafety { +type AssumedSystemReq "System-level requirement received from the wider operational context (e.g. platform)." extends CompReqSource { rationale "Explanation of why this system-level requirement exists and how it was derived." String } @@ -59,7 +62,7 @@ tuple AssumedSystemReqId { version Integer } -type FeatReq "High-level feature requirement derived from one or more AssumedSystemReq items." extends RequirementSafety { +type FeatReq "High-level feature requirement derived from one or more AssumedSystemReq items." extends CompReqSource { derived_from "One or more versioned references to the AssumedSystemReq items this feature requirement is derived from." AssumedSystemReqId[1 .. *] } @@ -71,7 +74,7 @@ tuple FeatReqId { } tuple CompReqSourceId { - item [FeatReq, AssumedSystemReq] + item CompReqSource separator @ version Integer } @@ -154,26 +157,23 @@ type FailureMode "A potential failure of a system function, described using one optional String } -type ControlMeasure "A design or operational measure that detects, prevents, or limits a failure mode." extends RequirementSafety { - mitigates "Reference to the FailureMode or safety concern that this requirement mitigates." - optional String +abstract type Measure "Base type for safety measures referenced from safety analyses." extends RequirementSafety { } -type PreventiveMeasure "A measure that prevents a failure mode from occurring in the first place." { +type ControlMeasure "A design or operational measure that detects, prevents, or limits a failure mode." extends Measure { } -type Mitigation "A measure that reduces the severity or probability of a failure mode's effect." extends AssumedSystemReq { - mitigates "Reference to the FailureMode or safety concern that this requirement mitigates." - optional String +type PreventiveMeasure "A measure that prevents a failure mode from occurring in the first place." extends Measure { } -type AoU "Assumption of Use — a safety-relevant condition that a user must fulfil." extends ControlMeasure { +type Mitigation "A measure that reduces the severity or probability of a failure mode's effect." extends Measure { + rationale "Explanation of why this mitigation is considered effective or necessary." + optional String } -tuple Measure { - item [ControlMeasure, PreventiveMeasure, Mitigation] - separator @ - version Integer +type AoU "Assumption of Use — a safety-relevant condition that a user must fulfil." extends ControlMeasure { + mitigates "Reference to the FailureMode or safety concern that this requirement mitigates." + optional String } ///////////////////////////////