{
  "type": "object",
  "description": "Cursor's advisory review. Parser semantics require pass with no risks or blocking issues, pass_with_risks with risks and no blocking issues, and fail with at least one blocking issue. Codex independently decides whether to act or continue.",
  "required": [
    "verdict",
    "blocking_issues",
    "risks",
    "recommended_revisions",
    "next_iteration_prompt"
  ],
  "properties": {
    "verdict": {
      "type": "string",
      "enum": ["pass", "pass_with_risks", "fail"],
      "description": "Cursor's advisory verdict; it does not authorize, block, or control Codex."
    },
    "blocking_issues": {
      "type": "array",
      "description": "Issues Cursor claims materially block progress; Codex independently accepts, rejects, or defers each one.",
      "items": {
        "type": "object",
        "required": ["id", "summary", "fix_hint"],
        "properties": {
          "id": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "fix_hint": {
            "type": "string"
          }
        }
      }
    },
    "risks": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["summary", "likelihood", "impact"],
        "properties": {
          "summary": {
            "type": "string"
          },
          "likelihood": {
            "type": "string",
            "enum": ["low", "medium", "high"]
          },
          "impact": {
            "type": "string",
            "enum": ["low", "medium", "high"]
          }
        }
      }
    },
    "recommended_revisions": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "next_iteration_prompt": {
      "type": "string",
      "description": "Optional follow-up prompt. Non-empty only for fail; Codex is never required to use it."
    }
  }
}
