62 lines
2.3 KiB
Python
62 lines
2.3 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
from pathlib import Path
|
|
|
|
from cognitive_agent.application.mode_profile import ModeProfileRegistry
|
|
from cognitive_agent.application.seat_service import REPOSITORY_ROOT, SeatDemoService
|
|
|
|
|
|
def test_all_repository_mode_cards_preserve_every_operation_in_dry_run(
|
|
tmp_path: Path,
|
|
) -> None:
|
|
"""Every visible preset must reach a validated executable configuration."""
|
|
|
|
service = SeatDemoService(REPOSITORY_ROOT)
|
|
service.mode_profiles = ModeProfileRegistry(
|
|
REPOSITORY_ROOT / "config" / "modes",
|
|
user_root=tmp_path / "user-modes",
|
|
)
|
|
service.artifact_root = tmp_path / "runs"
|
|
vehicle_id = "denza_n7"
|
|
failures: list[dict[str, object]] = []
|
|
|
|
for card in service.mode_profiles.public_modes(vehicle_id):
|
|
profile = service.mode_profiles.get_profile(str(card["id"]), vehicle_id)
|
|
result = service.process(
|
|
profile.instruction or f"进入{profile.name}",
|
|
provider="local",
|
|
conversation_id=f"conv-mode-integrity-{profile.id.replace('_', '-')}",
|
|
execution_mode="dry_run",
|
|
vehicle_id=vehicle_id,
|
|
control_transport="wireless_mqtt",
|
|
)
|
|
compiled_operations = [
|
|
operation
|
|
for config in result.get("function_configs", {}).values()
|
|
for operation in config.get("spec", {}).get("operations", [])
|
|
]
|
|
validation_errors = [
|
|
issue
|
|
for issue in result.get("validation", [])
|
|
if issue.get("severity") == "error"
|
|
]
|
|
if (
|
|
result.get("status") != "succeeded"
|
|
or validation_errors
|
|
or result.get("deferred_requests")
|
|
or len(compiled_operations) != len(profile.operations)
|
|
):
|
|
failures.append(
|
|
{
|
|
"id": profile.id,
|
|
"expected_operations": len(profile.operations),
|
|
"compiled_operations": len(compiled_operations),
|
|
"status": result.get("status"),
|
|
"deferred_requests": result.get("deferred_requests"),
|
|
"validation_errors": validation_errors,
|
|
}
|
|
)
|
|
|
|
assert not failures, json.dumps(failures, ensure_ascii=False, indent=2)
|