{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://skilla11y.dev/schema/cli-result-posix-json-v1.json",
  "title": "skill-a11y-audit POSIX JSON CLI result",
  "type": "object",
  "required": [
    "schema_version",
    "contract",
    "operational",
    "gate",
    "stages",
    "completed_stages",
    "artifacts",
    "report_files",
    "exit_code",
    "terminal"
  ],
  "properties": {
    "schema_version": { "const": 1 },
    "contract": {
      "type": "object",
      "required": ["name", "version", "experimental"],
      "properties": {
        "name": { "const": "posix-json-v1" },
        "version": { "const": 1 },
        "experimental": { "const": true }
      },
      "additionalProperties": false
    },
    "operational": {
      "type": "object",
      "required": ["status", "error"],
      "properties": {
        "status": { "enum": ["complete", "failed"] },
        "error": {
          "oneOf": [
            { "type": "null" },
            {
              "type": "object",
              "required": [
                "id",
                "exit_code",
                "message",
                "retryable",
                "safe_to_repeat"
              ],
              "properties": {
                "id": { "type": "string", "minLength": 1 },
                "exit_code": { "type": "integer", "minimum": 1, "maximum": 255 },
                "message": { "type": "string", "minLength": 1 },
                "retryable": { "type": "boolean" },
                "safe_to_repeat": { "type": "boolean" }
              },
              "additionalProperties": false
            }
          ]
        }
      },
      "allOf": [
        {
          "if": { "properties": { "status": { "const": "complete" } } },
          "then": { "properties": { "error": { "type": "null" } } }
        },
        {
          "if": { "properties": { "status": { "const": "failed" } } },
          "then": { "properties": { "error": { "type": "object" } } }
        }
      ],
      "additionalProperties": false
    },
    "gate": {
      "type": "object",
      "required": ["mode", "status"],
      "properties": {
        "mode": { "enum": ["none", "errors", "new", "major"] },
        "status": {
          "enum": ["not_requested", "not_evaluated", "accepted", "rejected", "inconclusive"]
        }
      },
      "additionalProperties": false
    },
    "stages": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["name", "command", "status", "exit_code", "signal"],
        "properties": {
          "name": { "enum": ["discover", "select", "scan", "report"] },
          "command": { "type": "array", "items": { "type": "string" }, "minItems": 2 },
          "status": { "enum": ["planned", "completed", "failed"] },
          "exit_code": { "type": ["integer", "null"] },
          "signal": { "type": ["string", "null"] }
        },
        "additionalProperties": false
      }
    },
    "completed_stages": {
      "type": "array",
      "items": { "enum": ["discover", "select", "scan", "report"] },
      "uniqueItems": true
    },
    "artifacts": {
      "type": "object",
      "additionalProperties": { "type": "string" }
    },
    "report_files": {
      "type": "array",
      "items": { "type": "string" },
      "uniqueItems": true
    },
    "exit_code": { "type": "integer", "minimum": 0, "maximum": 255 },
    "terminal": { "const": true },
    "dry_run": { "const": true }
  },
  "additionalProperties": false
}
