{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://platoskallipolis.com/schemas/revalidation-machine-release-graph.v1.json",
  "title": "Plato's Kallipolis revalidation machine release graph",
  "type": "object",
  "additionalProperties": false,
  "required": ["schema", "graphVersion", "state", "snapshotAt", "sources", "counts", "layers", "nodes", "edges", "identityOnlyReferences", "graphHash", "boundaries", "privacy"],
  "properties": {
    "schema": { "const": "kallipolis.revalidation-machine-release-graph.v1" },
    "graphVersion": { "const": "1.0.0" },
    "state": { "const": "verified-local-acyclic-release-graph" },
    "snapshotAt": { "type": "string", "format": "date-time" },
    "sources": { "$ref": "#/$defs/sources" },
    "counts": { "$ref": "#/$defs/counts" },
    "layers": { "type": "array", "minItems": 4, "maxItems": 4, "items": { "$ref": "#/$defs/layer" } },
    "nodes": { "type": "array", "minItems": 9, "maxItems": 9, "uniqueItems": true, "items": { "$ref": "#/$defs/node" } },
    "edges": { "type": "array", "minItems": 8, "maxItems": 8, "uniqueItems": true, "items": { "$ref": "#/$defs/edge" } },
    "identityOnlyReferences": { "type": "array", "minItems": 10, "maxItems": 10, "uniqueItems": true, "items": { "$ref": "#/$defs/identityOnlyReference" } },
    "graphHash": { "$ref": "#/$defs/digest" },
    "boundaries": { "$ref": "#/$defs/boundaries" },
    "privacy": { "$ref": "#/$defs/privacy" }
  },
  "$defs": {
    "digest": { "type": "string", "pattern": "^sha256:[a-f0-9]{64}$" },
    "sources": {
      "type": "object",
      "additionalProperties": false,
      "required": ["discoveryDriftContract", "trustReleaseSet", "machineReleaseIndex"],
      "properties": {
        "discoveryDriftContract": {
          "type": "object", "additionalProperties": false,
          "required": ["contractHash", "rawHash", "identityCount"],
          "properties": { "contractHash": { "$ref": "#/$defs/digest" }, "rawHash": { "$ref": "#/$defs/digest" }, "identityCount": { "const": 27 } }
        },
        "trustReleaseSet": {
          "type": "object", "additionalProperties": false,
          "required": ["releaseSetHash", "rawHash", "artifactCount"],
          "properties": { "releaseSetHash": { "$ref": "#/$defs/digest" }, "rawHash": { "$ref": "#/$defs/digest" }, "artifactCount": { "const": 3 } }
        },
        "machineReleaseIndex": {
          "type": "object", "additionalProperties": false,
          "required": ["releaseIndexHash", "rawHash", "byteBoundArtifactCount", "identityOverlayCount", "releaseGraphSchemaBinding", "releaseGraphCandidateBinding"],
          "properties": { "releaseIndexHash": { "$ref": "#/$defs/digest" }, "rawHash": { "$ref": "#/$defs/digest" }, "byteBoundArtifactCount": { "const": 22 }, "identityOverlayCount": { "const": 5 }, "releaseGraphSchemaBinding": { "const": "byte-bound-base" }, "releaseGraphCandidateBinding": { "const": "identity-only-overlay" } }
        }
      }
    },
    "counts": {
      "type": "object", "additionalProperties": false,
      "required": ["nodes", "layers", "edges", "schemaNodes", "sourceNodes", "publicCandidateNodes", "byteIdenticalCandidatePairs", "identityOnlyReferences", "cyclicDependencies"],
      "properties": {
        "nodes": { "const": 9 }, "layers": { "const": 4 }, "edges": { "const": 8 }, "schemaNodes": { "const": 3 }, "sourceNodes": { "const": 3 }, "publicCandidateNodes": { "const": 3 }, "byteIdenticalCandidatePairs": { "const": 3 }, "identityOnlyReferences": { "const": 10 }, "cyclicDependencies": { "const": 0 }
      }
    },
    "layer": {
      "type": "object", "additionalProperties": false, "required": ["layer", "name", "nodeIds"],
      "properties": { "layer": { "type": "integer", "minimum": 0, "maximum": 3 }, "name": { "enum": ["schemas", "discovery-byte-root", "dependent-sources-and-drift-candidate", "dependent-public-candidates"] }, "nodeIds": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/nodeId" } } }
    },
    "nodeId": { "type": "string", "pattern": "^(schema|source|candidate)\\.(discovery-drift|discovery-drift-contract|machine-release-index|trust-release-set)$" },
    "identityOnlyTargetId": { "type": "string", "pattern": "^(schema|candidate)\\.(machine-release-index|trust-release-set|machine-release-graph|machine-release-index-artifact-release-set|drift-guard-release-set-artifact-release-set)$" },
    "node": {
      "type": "object", "additionalProperties": false,
      "required": ["id", "kind", "layer", "path", "schema", "rawHash", "byteSize", "dependsOn", "memberHash"],
      "properties": {
        "id": { "$ref": "#/$defs/nodeId" }, "kind": { "enum": ["schema", "source", "public-candidate"] }, "layer": { "type": "integer", "minimum": 0, "maximum": 3 },
        "path": { "type": "string", "pattern": "^(apps/web/public/(schemas|evidence)|ops/evidence)/revalidation-[A-Za-z0-9._-]+\\.json$" },
        "schema": { "enum": ["kallipolis.revalidation-discovery-surface-drift.v1", "kallipolis.revalidation-machine-release-index.v1", "kallipolis.revalidation-trust-artifact-release-set.v1"] },
        "rawHash": { "$ref": "#/$defs/digest" }, "byteSize": { "type": "integer", "minimum": 1 },
        "dependsOn": { "type": "array", "maxItems": 2, "uniqueItems": true, "items": { "$ref": "#/$defs/nodeId" } }, "memberHash": { "$ref": "#/$defs/digest" }
      }
    },
    "edge": {
      "type": "object", "additionalProperties": false, "required": ["from", "to", "kind"],
      "properties": { "from": { "$ref": "#/$defs/nodeId" }, "to": { "$ref": "#/$defs/nodeId" }, "kind": { "enum": ["schema-validates", "raw-hash-dependency", "byte-identical-source"] } }
    },
    "identityOnlyReference": {
      "type": "object", "additionalProperties": false, "required": ["from", "to", "kind", "byteDependency"],
      "properties": { "from": { "const": "source.discovery-drift-contract" }, "to": { "$ref": "#/$defs/identityOnlyTargetId" }, "kind": { "const": "discovery-identity-only" }, "byteDependency": { "const": false } }
    },
    "boundaries": {
      "type": "object", "additionalProperties": false,
      "required": ["publicDeploymentPerformed", "sitesVersion", "verifiedIntegrationExamples", "verifiedIntegrationKpiIncrease", "productionStateChanged", "organicUseClaimed", "walletWrites", "niulaiTransactions"],
      "properties": { "publicDeploymentPerformed": { "const": false }, "sitesVersion": { "const": 19 }, "verifiedIntegrationExamples": { "const": 50 }, "verifiedIntegrationKpiIncrease": { "const": 0 }, "productionStateChanged": { "const": false }, "organicUseClaimed": { "const": false }, "walletWrites": { "const": 0 }, "niulaiTransactions": { "const": 0 } }
    },
    "privacy": {
      "type": "object", "additionalProperties": false,
      "required": ["credentialsStored", "identityOrActivityStored", "requestOrResponseBodiesStored", "walletDataStored"],
      "properties": { "credentialsStored": { "const": false }, "identityOrActivityStored": { "const": false }, "requestOrResponseBodiesStored": { "const": false }, "walletDataStored": { "const": false } }
    }
  }
}
