{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://qaatlas.dev/schemas/report.schema.json",
  "title": "QAAtlas Report",
  "description": "Schema for QAAtlas analysis report output",
  "type": "object",
  "required": ["version", "generatedAt", "summary", "testCases", "risks", "coverage", "metadata"],
  "properties": {
    "version": {
      "type": "string",
      "description": "Schema version"
    },
    "generatedAt": {
      "type": "string",
      "format": "date-time",
      "description": "ISO8601 timestamp when report was generated"
    },
    "summary": {
      "type": "object",
      "required": ["filesAnalyzed", "testsRecommended", "riskLevel"],
      "properties": {
        "filesAnalyzed": {
          "type": "integer",
          "minimum": 0
        },
        "testsRecommended": {
          "type": "integer",
          "minimum": 0
        },
        "riskLevel": {
          "type": "string",
          "enum": ["critical", "high", "medium", "low", "minimal"]
        }
      }
    },
    "testCases": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["id", "title", "description", "priority", "type", "targetFiles", "steps", "assertions"],
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier for the test case"
          },
          "title": {
            "type": "string",
            "description": "Short descriptive title"
          },
          "description": {
            "type": "string",
            "description": "Detailed description of what to test"
          },
          "priority": {
            "type": "string",
            "enum": ["critical", "high", "medium", "low"]
          },
          "type": {
            "type": "string",
            "enum": ["unit", "integration", "e2e", "regression", "smoke", "performance", "security", "manual"]
          },
          "targetFiles": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Files this test case targets"
          },
          "steps": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Test steps to follow"
          },
          "assertions": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Expected assertions/outcomes"
          },
          "unknowns": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Uncertainties or assumptions made"
          }
        }
      }
    },
    "risks": {
      "type": "array",
      "items": {
        "type": "object",
        "required": ["id", "severity", "description", "mitigation", "affectedFiles"],
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier for the risk"
          },
          "severity": {
            "type": "string",
            "enum": ["critical", "high", "medium", "low"]
          },
          "description": {
            "type": "string",
            "description": "Description of the risk"
          },
          "mitigation": {
            "type": "string",
            "description": "How to mitigate this risk"
          },
          "affectedFiles": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      }
    },
    "coverage": {
      "type": "object",
      "required": ["files"],
      "properties": {
        "files": {
          "type": "array",
          "items": {
            "type": "object",
            "required": ["path", "testCoverage", "gaps"],
            "properties": {
              "path": {
                "type": "string"
              },
              "testCoverage": {
                "type": "string",
                "enum": ["full", "partial", "none", "unknown"]
              },
              "gaps": {
                "type": "array",
                "items": {
                  "type": "string"
                },
                "description": "Description of untested areas"
              }
            }
          }
        }
      }
    },
    "metadata": {
      "type": "object",
      "required": ["provider", "model", "contextTruncated", "unknownsCount", "analyzedAt"],
      "properties": {
        "provider": {
          "type": "string",
          "description": "LLM provider used"
        },
        "model": {
          "type": "string",
          "description": "Model used for analysis"
        },
        "contextTruncated": {
          "type": "boolean",
          "description": "Whether any file context was truncated"
        },
        "truncatedFiles": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "List of files with truncated context"
        },
        "unknownsCount": {
          "type": "integer",
          "minimum": 0,
          "description": "Number of unknowns/assumptions made"
        },
        "analyzedAt": {
          "type": "string",
          "format": "date-time"
        },
        "diffSource": {
          "type": "string",
          "description": "Source of the diff (file, stdin, git)"
        }
      }
    }
  }
}
