build(agent): new-agents-2#7e3bbc iteration

This commit is contained in:
agent-7e3bbc424e07835b 2026-04-21 10:57:19 +02:00
parent 1bcfb62eec
commit 5db0cdfd87
2 changed files with 34 additions and 1 deletions

View File

@ -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 = ""

View File

@ -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)