import json from spacesafeml_certification_benchmark_and_.verification import VerificationEngine from spacesafeml_certification_benchmark_and_.dsl import ( SafetyContract, LocalCapabilities, Scenario, ResourceBudgets, ) def test_trace_id_is_deterministic_and_sensitive_to_seed(): plan = {"name": "mission-x", "actions": ["go", "scan"]} # Create a contract with a scenario that has an explicit seed sc = Scenario(scenario_id="sc-1", deterministic_replay=True, seed=12345, description="seeded") contract = SafetyContract(contract_id="c-1", local_capabilities=[LocalCapabilities(name="A")], scenarios=[sc]) engine = VerificationEngine() tid1 = engine._trace_id(plan, contract, scenario_id="sc-1") tid2 = engine._trace_id(plan, contract, scenario_id="sc-1") assert tid1 == tid2, "Trace id should be stable for same plan + scenario seed" # Changing the seed should change the trace id sc2 = Scenario(scenario_id="sc-1", deterministic_replay=True, seed=54321, description="seeded-different") contract2 = SafetyContract(contract_id="c-1", local_capabilities=[LocalCapabilities(name="A")], scenarios=[sc2]) tid3 = engine._trace_id(plan, contract2, scenario_id="sc-1") assert tid3 != tid1, "Different scenario seed should change trace id"