rohitg00/ai-engineering-from-scratch · error · ValueError

release gate root must be an object

Error message

release gate root must be an object

What it means

Error "release gate root must be an object" thrown in rohitg00/ai-engineering-from-scratch.

Source

Thrown at certifications/claude/lessons/14-evals-testing-debugging-and-observability/code/main.py:133

        errors.append("severeCasePassRate must be 1.0")
    if not isinstance(gate.get("severeCases"), list) or len(gate["severeCases"]) < 3:
        errors.append("at least three severeCases are required")
    required_surfaces = {"output", "trajectory", "final-state", "safety", "operational-budget"}
    if not required_surfaces <= set(gate.get("evaluationSurfaces", [])):
        errors.append("all five evaluation surfaces are required")
    required_trace = {"trace_id", "type", "model_version", "prompt_version", "policy", "latency_ms", "result_class"}
    if not required_trace <= set(gate.get("requiredTraceFields", [])):
        errors.append("required trace fields are incomplete")
    required_failures = {"transport_timeout", "protocol_error", "contract_parse_error", "policy_denial", "final_state_failure"}
    if not required_failures <= set(gate.get("failureClasses", [])):
        errors.append("failure classes are incomplete")
    return errors


def load_release_gate(path: str) -> dict[str, Any]:
    value = json.loads(Path(path).read_text(encoding="utf-8"))
    if not isinstance(value, dict):
        raise ValueError("release gate root must be an object")
    return value


def _elapsed_ms(started: float) -> float:
    return (time.perf_counter() - started) * 1000


def demo_agent(prompt: str) -> AgentRun:
    if "missing" in prompt:
        return AgentRun("I cannot verify that order.", (), {"escalated": True}, ({"type": "decision", "reason": "missing_id"},))
    return AgentRun("Order A-17 is ready.", ("lookup_order",), {"escalated": False}, ({"type": "tool_call", "name": "lookup_order"},))


def demo() -> dict[str, Any]:
    cases = [
        EvalCase("known", "Find A-17", ("ready",), (), ("lookup_order",), {"escalated": False}),
        EvalCase("missing", "The order id is missing", ("cannot verify",), ("ready",), (), {"escalated": True}),
    ]

View on GitHub (pinned to 39ea8a1c6d)

When it happens

Trigger: Thrown at certifications/claude/lessons/14-evals-testing-debugging-and-observability/code/main.py:133 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of rohitg00/ai-engineering-from-scratch@39ea8a1c6d (2026-08-26). Data as JSON: /api/errors/0122c0878ac28f3c. Report an issue: GitHub.