{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://platoskallipolis.com/schemas/resource-quality-rollup.v1.json",
  "title": "Plato's Kallipolis Aggregate Resource Quality Rollup",
  "type": "object",
  "additionalProperties": false,
  "required": ["schema", "state", "snapshotAt", "evaluatedPublicResourceCount", "qualityPassingPublicResourceCount", "candidateProductionQualityResourceCount", "counts", "ratesBasisPoints", "minimumPublishedCategoryCount", "byCategory", "suppressedCategoryCount", "assessmentSetHash", "privacy", "productionQualityMetric"],
  "properties": {
    "schema": {"const": "kallipolis.resource-quality-rollup.v1"},
    "state": {"const": "non-production"},
    "snapshotAt": {"type": "string", "format": "date-time"},
    "evaluatedPublicResourceCount": {"type": "integer", "minimum": 0},
    "qualityPassingPublicResourceCount": {"type": "integer", "minimum": 0},
    "candidateProductionQualityResourceCount": {"type": "integer", "minimum": 0},
    "counts": {
      "type": "object",
      "additionalProperties": false,
      "required": ["catalog", "quality"],
      "properties": {
        "catalog": {
          "type": "object",
          "additionalProperties": false,
          "required": ["prepared", "live", "retired"],
          "properties": {
            "prepared": {"type": "integer", "minimum": 0},
            "live": {"type": "integer", "minimum": 0},
            "retired": {"type": "integer", "minimum": 0}
          }
        },
        "quality": {
          "type": "object",
          "additionalProperties": false,
          "required": ["schemaValid", "provenanceVerified", "freshnessCurrent", "openContradictions", "invalidOrWithdrawn"],
          "properties": {
            "schemaValid": {"type": "integer", "minimum": 0},
            "provenanceVerified": {"type": "integer", "minimum": 0},
            "freshnessCurrent": {"type": "integer", "minimum": 0},
            "openContradictions": {"type": "integer", "minimum": 0},
            "invalidOrWithdrawn": {"type": "integer", "minimum": 0}
          }
        }
      }
    },
    "ratesBasisPoints": {
      "type": "object",
      "additionalProperties": false,
      "required": ["qualityPassing", "freshnessCurrent"],
      "properties": {
        "qualityPassing": {"type": ["integer", "null"], "minimum": 0, "maximum": 10000},
        "freshnessCurrent": {"type": ["integer", "null"], "minimum": 0, "maximum": 10000}
      }
    },
    "minimumPublishedCategoryCount": {"const": 5},
    "byCategory": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["category", "evaluatedResourceCount", "qualityPassingResourceCount"],
        "properties": {
          "category": {"type": "string"},
          "evaluatedResourceCount": {"type": "integer", "minimum": 5},
          "qualityPassingResourceCount": {"type": "integer", "minimum": 0}
        }
      }
    },
    "suppressedCategoryCount": {"type": "integer", "minimum": 0},
    "assessmentSetHash": {"type": "string", "pattern": "^sha256:[a-f0-9]{64}$"},
    "privacy": {
      "type": "object",
      "additionalProperties": false,
      "required": ["resourceDigestsExposed", "resourceIdsExposed", "ownerIdentityStored", "ownerActivityStored", "contributionTimestampsStored", "requestDataStored"],
      "properties": {
        "resourceDigestsExposed": {"const": false},
        "resourceIdsExposed": {"const": false},
        "ownerIdentityStored": {"const": false},
        "ownerActivityStored": {"const": false},
        "contributionTimestampsStored": {"const": false},
        "requestDataStored": {"const": false}
      }
    },
    "productionQualityMetric": {
      "type": "object",
      "additionalProperties": false,
      "required": ["enabled", "value", "candidateValueIsAchievedMetric", "missingActivationGates"],
      "properties": {
        "enabled": {"const": false},
        "value": {"type": "null"},
        "candidateValueIsAchievedMetric": {"const": false},
        "missingActivationGates": {"type": "array", "minItems": 1, "uniqueItems": true, "items": {"type": "string"}}
      }
    }
  }
}
