{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://spec-first.dev/schemas/spec-app-consistency-audit/issue.schema.json",
  "title": "spec-app-consistency-audit strict issue",
  "type": "object",
  "required": [
    "id",
    "title",
    "severity",
    "category",
    "claim_family",
    "claim_type",
    "affected_surface",
    "expert",
    "confidence",
    "contract_status",
    "data_sensitivity",
    "static_confirmed",
    "requires_runtime_verification",
    "requires_real_device",
    "provenance",
    "evidence",
    "impact",
    "recommendation",
    "related_rule_packs",
    "runtime_verification",
    "validation_status",
    "review_lifecycle"
  ],
  "properties": {
    "id": { "type": "string", "minLength": 1 },
    "title": { "type": "string", "minLength": 1, "maxLength": 240 },
    "category": { "type": "string", "minLength": 1 },
    "claim_family": { "type": "string", "minLength": 1 },
    "claim_type": { "type": "string", "minLength": 1 },
    "expert": { "type": "string", "minLength": 1 },
    "severity": { "enum": ["blocker", "high", "medium", "low", "info"] },
    "confidence": { "type": "number", "minimum": 0, "maximum": 1 },
    "contract_status": { "enum": ["candidate", "confirmed", "rejected"] },
    "static_confirmed": { "type": "boolean" },
    "requires_runtime_verification": { "type": "boolean" },
    "requires_real_device": { "type": "boolean" },
    "validation_status": { "enum": ["not_required", "validated", "validator_rejected", "validator_unavailable"] },
    "impact": { "type": "array", "minItems": 1, "items": { "type": "string", "maxLength": 500 } },
    "recommendation": { "type": "array", "minItems": 1, "items": { "type": "string", "maxLength": 500 } },
    "affected_surface": {
      "type": "object",
      "required": ["type", "id", "file"]
    },
    "provenance": {
      "type": "array",
      "minItems": 1,
      "items": { "$ref": "#/$defs/evidence_entry" }
    },
    "evidence": {
      "oneOf": [
        {
          "type": "array",
          "minItems": 1,
          "items": { "$ref": "#/$defs/evidence_entry" }
        },
        {
          "type": "object",
          "minProperties": 1,
          "additionalProperties": {
            "type": "array",
            "minItems": 1,
            "items": { "$ref": "#/$defs/evidence_entry" }
          }
        }
      ]
    },
    "related_rule_packs": { "type": "array" },
    "runtime_verification": { "type": "object" },
    "review_lifecycle": { "type": "array", "minItems": 1 }
  },
  "allOf": [
    {
      "if": {
        "properties": { "contract_status": { "const": "confirmed" } },
        "required": ["contract_status"]
      },
      "then": {
        "properties": { "static_confirmed": { "const": true } },
        "required": ["static_confirmed"]
      }
    },
    {
      "if": {
        "properties": { "contract_status": { "enum": ["candidate", "rejected"] } },
        "required": ["contract_status"]
      },
      "then": {
        "properties": { "static_confirmed": { "const": false } },
        "required": ["static_confirmed"]
      }
    }
  ],
  "$defs": {
    "evidence_entry": {
      "type": "object",
      "anyOf": [
        { "required": ["file"] },
        { "required": ["path"] },
        { "required": ["artifact_id"] },
        { "required": ["node_id"] },
        { "required": ["route"] },
        { "required": ["event"] },
        { "required": ["key"] }
      ],
      "additionalProperties": true
    }
  },
  "additionalProperties": true
}
