From 5db0cdfd87fdf98343b209a6f8b8de899d708ca8 Mon Sep 17 00:00:00 2001 From: agent-7e3bbc424e07835b Date: Tue, 21 Apr 2026 10:57:19 +0200 Subject: [PATCH] build(agent): new-agents-2#7e3bbc iteration --- .../dsl.py | 17 +++++++++++++++++ .../interoperability.py | 18 +++++++++++++++++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/spacesafeml_certification_benchmark_and_/dsl.py b/spacesafeml_certification_benchmark_and_/dsl.py index f4087d7..47fd3ff 100644 --- a/spacesafeml_certification_benchmark_and_/dsl.py +++ b/spacesafeml_certification_benchmark_and_/dsl.py @@ -51,3 +51,20 @@ class SafetyContract: budgets: Optional[ResourceBudgets] = None data_policy: Optional[DataSharingPolicy] = None version: str = "1.0" + # MVP extension: optional, versioned scenarios for deterministic replay and testing + scenarios: List["Scenario"] = field(default_factory=list) + + +@dataclass +class Scenario: + """Minimal representation of a test/operational scenario for safety contracts. + + This enables versioned scenarios with sensors, environment disturbances, + and deterministic replay hooks. The fields are kept intentionally lightweight + to avoid breaking existing contracts while enabling extensibility. + """ + scenario_id: str + sensors: Dict[str, Any] = field(default_factory=dict) + environment: Dict[str, Any] = field(default_factory=dict) + deterministic_replay: bool = False + description: str = "" diff --git a/spacesafeml_certification_benchmark_and_/interoperability.py b/spacesafeml_certification_benchmark_and_/interoperability.py index 5f27ad0..1788c58 100644 --- a/spacesafeml_certification_benchmark_and_/interoperability.py +++ b/spacesafeml_certification_benchmark_and_/interoperability.py @@ -11,7 +11,7 @@ from __future__ import annotations from dataclasses import dataclass, field, asdict from typing import List, Dict, Any -from .dsl import SafetyContract, LocalCapabilities +from .dsl import SafetyContract, LocalCapabilities, Scenario @dataclass @@ -88,6 +88,22 @@ def contract_to_ir(contract: SafetyContract) -> IRCube: audit_log_ref="", ) + # If the contract contains scenarios, map them into IR objects as well + if contract.scenarios: + for sc in contract.scenarios: + obj = IRObject( + id=f"scenario-{sc.scenario_id}", + type="Scenario", + properties={ + "scenario_id": sc.scenario_id, + "description": sc.description, + "sensors": sc.sensors, + "environment": sc.environment, + "deterministic_replay": sc.deterministic_replay, + }, + ) + objects.append(obj) + return IRCube(objects=objects, morphisms=morphisms, plan_delta=plan_delta, dual_variables=dual)