feat(simulation): qualify S0 time and resource gates

This commit is contained in:
DCCONSTRUCTIONS
2026-07-24 17:19:28 +03:00
parent 6290fcb2ce
commit c9b1009259
10 changed files with 1205 additions and 23 deletions
+17 -2
View File
@@ -49,6 +49,12 @@ def test_canonical_s0_profile_is_strict_and_safe() -> None:
assert profile.authority.navigation_or_safety_accepted is False
assert profile.authority.direct_actuator_setpoints_allowed is False
assert profile.ros.domain_id == 0
assert profile.runtime_acceptance.world == "rover"
assert profile.runtime_acceptance.model == "rover_ackermann_0"
assert profile.runtime_acceptance.physics_step_ns == 2_000_000
assert profile.runtime_acceptance.pause_max_advance_ns == 0
assert profile.runtime_acceptance.speed_factors == (1, 2)
assert profile.runtime_acceptance.rtf_tolerance_percent == 20
assert "docker" not in profile.required_tools
assert {item.identifier for item in profile.components} >= {
"px4-autopilot",
@@ -60,8 +66,7 @@ def test_canonical_s0_profile_is_strict_and_safe() -> None:
assert components["px4-gazebo-models"].resolved_commit == (
"b6127f4ec20de867e215fb5f78ae88b80f371909"
)
assert components["ros2"].qualification_state == "candidate"
assert components["gazebo"].qualification_state == "candidate"
assert {component.qualification_state for component in components.values()} == {"accepted"}
micro_xrce = next(item for item in profile.ports if item.identifier == "micro-xrce-dds")
assert micro_xrce.host_scope == "loopback-only-netns"
assert micro_xrce.bind == "0.0.0.0"
@@ -126,6 +131,16 @@ def test_profile_rejects_wildcard_bind_outside_loopback_namespace(
load_s0_profile(_write_profile(tmp_path, document))
def test_profile_rejects_runtime_speed_contract_drift(tmp_path: Path) -> None:
document = _profile_document()
runtime = document["runtime_acceptance"]
assert isinstance(runtime, dict)
runtime["speed_factors"] = [1, 4]
with pytest.raises(S0ProfileError, match="exactly the 1x and 2x"):
load_s0_profile(_write_profile(tmp_path, document))
def test_doctor_never_claims_go_without_target_evidence(monkeypatch: pytest.MonkeyPatch) -> None:
monkeypatch.setattr(
"k1link.simulation.s0._target_host_match",