"""Admission metadata for workflows whose behavioral verification is deferred.""" from __future__ import annotations def compilation_requested(root, result): from wbv2_autopilot import CONTROL, read_json if result.get("contractKind") == "compilation_only": return True preferences = read_json(root / CONTROL / "preferences.json", {}) return preferences.get("verificationTiming") in {"on_user_use", "after_all_features"} and not result.get("cases") def validate_compilation_shape(result): if not isinstance(result, dict): raise ValueError("compilation contract must be an object") for field in ("sourceUnits", "routeIds", "sourceReferences", "dependencies", "artifacts", "changedFiles"): values = result.get(field) if not isinstance(values, list) or not all(isinstance(value, str) and value for value in values): raise ValueError(f"compilation contract requires a path/identifier list: {field}") for field in ("sourceUnits", "routeIds", "sourceReferences", "artifacts"): if not result[field]: raise ValueError(f"compilation contract requires nonempty {field}") if not isinstance(result.get("workflow"), str) or not result["workflow"].strip(): raise ValueError("compilation contract requires a concrete workflow") checks = result.get("checks") if not isinstance(checks, list) or not checks: raise ValueError("compilation contract requires executable build checks") for check in checks: if not isinstance(check, dict): raise ValueError("compilation check must be an object") for field in ("id", "cwd"): if not isinstance(check.get(field), str) or not check[field]: raise ValueError(f"compilation check requires {field}") for field in ("argv", "kinds"): values = check.get(field) if not isinstance(values, list) or not values or not all(isinstance(value, str) and value for value in values): raise ValueError(f"compilation check requires a nonempty {field} list") cases = result.get("cases", []) if not isinstance(cases, list): raise ValueError("compilation cases must be a list when present") def require_behavioral_contract(result): if result.get("contractKind") == "compilation_only": raise ValueError( "behavioral verification unavailable: compilation-only contract; " "add complete behavior checks and source-bound cases before explicit verify" )