{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://tune.toys/schemas/platform/artifact.schema.json",
  "title": "ArtifactDescriptor",
  "description": "One registered build output of a product version. digest, size, inventory, targetProfile, format and arch never change; a correction is a new artifact.",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "id": {
      "$ref": "common.schema.json#/$defs/EntityId"
    },
    "versionId": {
      "$ref": "common.schema.json#/$defs/EntityId"
    },
    "targetProfile": {
      "$ref": "enums.schema.json#/$defs/TargetProfile"
    },
    "format": {
      "$ref": "enums.schema.json#/$defs/ArtifactFormat"
    },
    "arch": {
      "$ref": "enums.schema.json#/$defs/ArtifactArch"
    },
    "digest": {
      "$ref": "common.schema.json#/$defs/Sha256Hex"
    },
    "size": {
      "$ref": "common.schema.json#/$defs/ByteSize"
    },
    "signatureState": {
      "$ref": "enums.schema.json#/$defs/SignatureState"
    },
    "qualificationState": {
      "$ref": "enums.schema.json#/$defs/QualificationState"
    },
    "inventory": {
      "$ref": "#/$defs/ArtifactInventory"
    },
    "minEngineVersion": {
      "$ref": "common.schema.json#/$defs/SemVer"
    },
    "hidden": {
      "type": "boolean",
      "description": "Hidden from the download chooser without yanking."
    }
  },
  "required": [
    "id",
    "versionId",
    "targetProfile",
    "format",
    "arch",
    "digest",
    "size",
    "signatureState",
    "qualificationState",
    "inventory",
    "minEngineVersion",
    "hidden"
  ],
  "$defs": {
    "ArtifactInventory": {
      "title": "ArtifactInventory",
      "description": "Declared contents of an artifact, verified against the unpacked archive and the version releases.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "releaseDigest": {
          "$ref": "common.schema.json#/$defs/Sha256Hex"
        },
        "engineDigest": {
          "$ref": "common.schema.json#/$defs/Sha256Hex"
        },
        "pluginContractDigest": {
          "$ref": "common.schema.json#/$defs/Sha256Hex"
        },
        "files": {
          "type": "array",
          "items": {
            "$ref": "#/$defs/ArtifactFile"
          },
          "maxItems": 4096
        }
      },
      "required": ["releaseDigest", "engineDigest", "files"]
    },
    "ArtifactFile": {
      "title": "ArtifactFile",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "path": {
          "type": "string",
          "minLength": 1,
          "maxLength": 1024,
          "pattern": "^(?!/)(?!.*(^|/)\\.\\.?(/|$))[A-Za-z0-9 ._+@()/-]+$",
          "description": "Relative archive path without dot segments."
        },
        "sha256": {
          "$ref": "common.schema.json#/$defs/Sha256Hex"
        },
        "size": {
          "$ref": "common.schema.json#/$defs/ByteSize"
        }
      },
      "required": ["path", "sha256", "size"]
    }
  }
}
