from pathlib import Path from tests.frontend_contract import read_feature ROOT = Path(__file__).resolve().parents[2] def test_detection_operator_profiles_define_explicit_historical_yolo_controls_without_promotion_claim() -> None: profiles = ROOT / "frontend" / "src" / "components" / "detection" / "detectionProfiles.ts" source = profiles.read_text(encoding="utf-8") assert "DETECTION_OPERATOR_PROFILES" in source assert "geointel-building-yolov8s-smallbld-minpx3-img640-ft30-pt" in source assert "geointel-building-yolov8s-aoi1024expandedminpx4vis035e50-pt" in source assert "geointel-building-yolov8s-aoi1024bg512r3e50-pt" in source assert "small-building-balanced-review" in source assert "expanded-balanced-review" in source assert "conservative-review" in source assert "confidenceThreshold: 0.15" in source assert "confidenceThreshold: 0.35" in source assert "defaultApproved" not in source assert "promotionRecommendation" not in source assert "independentTestProven: false" in source assert "positiveSampleCount: 7" in source # The figures themselves are checked against the evidence record in # tests/test_detection_profile_metrics_are_traceable.py. Pinning them as # literals here is what kept an unsourced precision in the product. assert "maxBackgroundDetections: 0" in source assert "maxBackgroundDetections: 55" in source assert "backgroundGate:" in source assert "Slechts drie pure-achtergrondbeelden" in source assert "ruimtelijke onafhankelijkheid niet bewezen" in source assert "controlekandidaat en niet als grondwaarheid" in source def test_detection_lab_surfaces_profiles_as_deliberate_operator_actions() -> None: lab = "\n".join( ( (ROOT / "frontend" / "src" / "components" / "detection" / "DetectionLab.tsx").read_text(encoding="utf-8"), (ROOT / "frontend" / "src" / "components" / "detection" / "DetectionModelManagement.tsx").read_text(encoding="utf-8"), ) ) assert "DETECTION_OPERATOR_PROFILES" in lab assert "Historische YOLO-controleprofielen" in lab assert "profile.displayName" in lab assert "profile.confidenceThreshold" in lab assert "historisch, geen releasebewijs" in lab assert "historische F1" in lab assert "Profiel gebruiken" in lab assert "onApplyOperatorProfile(profile)" in lab assert "Recommended starting threshold: 0.25" not in lab def test_detection_workflow_applies_profiles_without_selecting_the_first_arbitrary_asset() -> None: hook = (ROOT / "frontend" / "src" / "hooks" / "useDetectionWorkflow.ts").read_text(encoding="utf-8") app = read_feature("shell") assert "applyDetectionOperatorProfile" in hook assert "setSelectedDetectionModelId('yolo-configured')" in hook assert "setSelectedModelAssetId(profile.modelAssetId)" in hook assert "setDetectionConfidenceThreshold(profile.confidenceThreshold)" in hook assert "setSelectedModelAssetId(assetResponse.items[0]" not in hook assert "onApplyOperatorProfile={applyDetectionOperatorProfile}" in app