{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://genesiscode.dev/schemas/artifact-hash-tree-v0.1.json",
  "title": "GenesisCode Artifact Hash Tree v0.1",
  "type": "object",
  "additionalProperties": false,
  "required": ["kind", "version", "algorithm", "rootDigest", "entries"],
  "properties": {
    "kind": {"const": "genesis/artifact-hash-tree-v0.1"},
    "version": {"const": "0.1"},
    "algorithm": {"const": "sha256-merkle-v0.1"},
    "rootDigest": {"$ref": "#/$defs/digest"},
    "entries": {
      "type": "array",
      "minItems": 1,
      "maxItems": 4096,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": ["path", "digest", "sizeBytes", "type"],
        "properties": {
          "path": {"$ref": "#/$defs/relativePath"},
          "digest": {"$ref": "#/$defs/digest"},
          "sizeBytes": {"type": "integer", "minimum": 0},
          "type": {"const": "file"}
        }
      }
    }
  },
  "$defs": {
    "digest": {
      "type": "object",
      "additionalProperties": false,
      "required": ["sha256"],
      "properties": {
        "sha256": {"type": "string", "pattern": "^[0-9a-f]{64}$"}
      }
    },
    "relativePath": {
      "type": "string",
      "minLength": 1,
      "pattern": "^(?!/)(?![A-Za-z]:)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*//)(?!.*\\\\).+$"
    }
  }
}
