"""Safety Contract DSL (minimal MVP). Defines simple data models to describe safety contracts for onboard AI planning. """ from __future__ import annotations from dataclasses import dataclass, field from typing import List, Dict, Any, Optional @dataclass class LocalCapabilities: name: str capabilities: List[str] = field(default_factory=list) metadata: Dict[str, Any] = field(default_factory=dict) @dataclass class SafetyPreConditions: description: str conditions: Dict[str, Any] = field(default_factory=dict) @dataclass class SafetyPostConditions: description: str conditions: Dict[str, Any] = field(default_factory=dict) @dataclass class ResourceBudgets: cpu_cores: float = 0.0 memory_gb: float = 0.0 energy_wh: float = 0.0 time_seconds: float = 0.0 @dataclass class DataSharingPolicy: policy_id: str allowed_data: List[str] = field(default_factory=list) constraints: Dict[str, Any] = field(default_factory=dict) @dataclass class SafetyContract: contract_id: str local_capabilities: List[LocalCapabilities] = field(default_factory=list) pre_conditions: Optional[SafetyPreConditions] = None post_conditions: Optional[SafetyPostConditions] = None 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 = ""