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

policy root must be an object

Error message

policy root must be an object

What it means

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

Source

Thrown at certifications/claude/lessons/12-claude-agent-sdk-and-hooks/code/main.py:305

                return {"allowed": False, "reason": "coordinate is outside the displayed screenshot"}

        approval = self.config["humanApproval"]
        if trusted_risk_class in approval["deniedRiskClasses"]:
            return {"allowed": False, "reason": "risk class is denied"}
        if trusted_risk_class in approval["requiredRiskClasses"] and not approved:
            return {"allowed": False, "reason": "human approval required"}
        if trusted_risk_class not in approval["allowedRiskClasses"] and trusted_risk_class not in approval["requiredRiskClasses"]:
            return {"allowed": False, "reason": "unknown trusted risk class"}

        self.screenshot_id = None
        self.needs_verification = True
        return {"allowed": True, "reason": "action passed policy; capture a verification screenshot"}


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


if __name__ == "__main__":
    path = Path(__file__).parents[1] / "outputs" / "agent-harness-policy.json"
    policy = load_policy(path)
    fixture = load_policy(Path(__file__).parents[1] / "outputs" / "managed-agent-event-fixture.json")
    checkpoint = fixture["events"][: fixture["checkpoint_after"]]
    print(
        json.dumps(
            {
                "valid": not validate_policy(policy),
                "read": evaluate_action(policy, "Read", False),
                "editWithoutApproval": evaluate_action(policy, "Edit", False),
                "managedCheckpoint": consume_managed_events(checkpoint).to_dict(),
                "managedComplete": consume_managed_events(fixture["events"]).to_dict(),
            },
            indent=2,

View on GitHub (pinned to 39ea8a1c6d)

When it happens

Trigger: Thrown at certifications/claude/lessons/12-claude-agent-sdk-and-hooks/code/main.py:305 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/e0fffe9af0b57648. Report an issue: GitHub.