{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://www.antfleet.dev/schemas/acp/review-request-v0.json",
  "title": "AntFleet ACP review request",
  "description": "Request a two-model AntFleet review for one public GitHub pull request. Provide either a PR number or an open PR head SHA, plus optional review focus settings.",
  "type": "object",
  "additionalProperties": false,
  "required": ["target", "mode"],
  "properties": {
    "mode": {
      "type": "string",
      "const": "pr",
      "description": "v0 reviews one public pull request."
    },
    "target": {
      "type": "object",
      "description": "Public GitHub repository and pull request target to review.",
      "additionalProperties": false,
      "required": ["repo"],
      "properties": {
        "repo": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+$",
          "description": "GitHub repository in owner/name form.",
          "examples": ["virtuals-agent/acp-handler"]
        },
        "pr": {
          "type": "integer",
          "minimum": 1,
          "description": "Required when mode=pr unless sha is supplied and resolves to exactly one open PR head."
        },
        "sha": {
          "type": "string",
          "pattern": "^[0-9a-fA-F]{7,64}$",
          "description": "Optional PR head SHA. For PR reviews, SHA must resolve to exactly one open PR head."
        }
      }
    },
    "client": {
      "type": "object",
      "description": "Optional client contact metadata. The authenticated ACP client wallet remains authoritative.",
      "additionalProperties": false,
      "properties": {
        "agent_wallet": {
          "type": "string",
          "pattern": "^0x[a-fA-F0-9]{40}$",
          "description": "Optional client agent wallet hint; ACP authenticated wallet is authoritative."
        },
        "agent_name": {
          "type": "string",
          "maxLength": 120,
          "description": "Optional client agent name."
        },
        "contact_email": {
          "type": "string",
          "format": "email",
          "description": "Optional human/operator contact email for follow-up."
        }
      }
    },
    "options": {
      "type": "object",
      "description": "Review options for public receipt, focus areas, finding count, and trading-code acknowledgment.",
      "additionalProperties": false,
      "properties": {
        "public_receipt": {
          "type": "boolean",
          "const": true,
          "default": true,
          "description": "v0 requires public receipts for public PR reviews."
        },
        "focus": {
          "type": "array",
          "description": "Optional focus areas for the review.",
          "maxItems": 5,
          "items": {
            "type": "string",
            "enum": [
              "security",
              "api-contract",
              "data-loss",
              "concurrency",
              "trading-risk",
              "build-release"
            ]
          }
        },
        "max_findings": {
          "type": "integer",
          "minimum": 0,
          "maximum": 20,
          "description": "Maximum number of consensus findings to include.",
          "default": 10
        },
        "acknowledge_not_financial_advice": {
          "type": "boolean",
          "description": "Required true when focus includes trading-risk."
        }
      }
    }
  },
  "allOf": [
    {
      "oneOf": [
        {
          "properties": {
            "target": {
              "required": ["pr"],
              "not": { "required": ["sha"] }
            }
          }
        },
        {
          "properties": {
            "target": {
              "required": ["sha"],
              "not": { "required": ["pr"] }
            }
          }
        }
      ]
    },
    {
      "if": {
        "properties": {
          "options": {
            "properties": {
              "focus": {
                "contains": { "const": "trading-risk" }
              }
            },
            "required": ["focus"]
          }
        }
      },
      "then": {
        "properties": {
          "options": {
            "required": ["acknowledge_not_financial_advice"],
            "properties": {
              "acknowledge_not_financial_advice": { "const": true }
            }
          }
        }
      }
    }
  ]
}
