{
  "before": {
    "name": "preview_reservation",
    "description": "Preview a party-size request without reserving or charging.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "seats": {
          "type": "integer",
          "minimum": 1,
          "maximum": 6
        },
        "accessible": {
          "type": "boolean"
        }
      },
      "required": [
        "seats"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "readOnlyHint": true
    }
  },
  "after": {
    "name": "preview_reservation",
    "description": "Preview a party-size request without reserving or charging.",
    "inputSchema": {
      "type": "object",
      "properties": {
        "seats": {
          "type": "integer",
          "minimum": 1,
          "maximum": 4
        },
        "accessible": {
          "type": "boolean"
        }
      },
      "required": [
        "seats",
        "accessible"
      ],
      "additionalProperties": false
    },
    "annotations": {
      "readOnlyHint": true
    }
  },
  "cases": [
    {
      "name": "Two seats, existing caller",
      "input": {
        "seats": 2
      },
      "expect": "accept"
    },
    {
      "name": "Group at old upper limit",
      "input": {
        "seats": 6,
        "accessible": false
      },
      "expect": "accept"
    },
    {
      "name": "New upper limit",
      "input": {
        "seats": 4,
        "accessible": true
      },
      "expect": "accept"
    },
    {
      "name": "No seats",
      "input": {
        "seats": 0,
        "accessible": false
      },
      "expect": "reject"
    },
    {
      "name": "String instead of integer",
      "input": {
        "seats": "2",
        "accessible": false
      },
      "expect": "reject"
    },
    {
      "name": "Fractional party",
      "input": {
        "seats": 1.5,
        "accessible": false
      },
      "expect": "reject"
    }
  ]
}