{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "vaultfire.base-v3-governance-proposal.v1.schema.json",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schema",
    "templateId",
    "status",
    "title",
    "actionClass",
    "governance",
    "action",
    "approvalRequirements",
    "approvalEvidence",
    "blockedOn"
  ],
  "properties": {
    "schema": {
      "const": "vaultfire.base-v3-governance-proposal.v1"
    },
    "templateId": {
      "type": "string"
    },
    "status": {
      "const": "template-not-submittable"
    },
    "title": {
      "type": "string"
    },
    "actionClass": {
      "enum": [
        "signer-guardian",
        "attesters",
        "adjudicators",
        "design-partner",
        "module-route",
        "caps",
        "factory-permission",
        "write-activation"
      ]
    },
    "governance": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "signerSlots",
        "threshold",
        "timelockSeconds",
        "implementationReference"
      ],
      "properties": {
        "signerSlots": {
          "type": "array",
          "minItems": 5,
          "maxItems": 5,
          "items": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "threshold": {
          "const": 3
        },
        "timelockSeconds": {
          "const": 86400
        },
        "implementationReference": {
          "type": [
            "string",
            "null"
          ]
        }
      }
    },
    "action": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "target",
        "valueWei",
        "calldata",
        "parameters"
      ],
      "properties": {
        "target": {
          "type": [
            "string",
            "null"
          ]
        },
        "valueWei": {
          "const": "0"
        },
        "calldata": {
          "type": [
            "string",
            "null"
          ]
        },
        "parameters": {
          "type": "object"
        }
      }
    },
    "approvalRequirements": {
      "type": "array",
      "minItems": 3,
      "items": {
        "type": "string"
      }
    },
    "approvalEvidence": {
      "type": "array",
      "maxItems": 0
    },
    "blockedOn": {
      "type": "array",
      "minItems": 1,
      "items": {
        "type": "string"
      }
    }
  }
}
