{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://hogarmas.net/content-credentials/provenance-timeline-schema.json",
  "title": "H/M Content Credentials Provenance Timeline",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schema",
    "ruleset",
    "orderBasis",
    "eventCount",
    "events",
    "statistics",
    "boundaries"
  ],
  "properties": {
    "schema": {
      "const": "hm.content-credentials-provenance-timeline.v1"
    },
    "ruleset": {
      "const": "2026-07-28.2"
    },
    "orderBasis": {
      "const": "manifest-presentation-order"
    },
    "eventCount": {
      "type": "integer",
      "minimum": 0,
      "maximum": 120
    },
    "events": {
      "type": "array",
      "maxItems": 120,
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "sequence",
          "kind",
          "label",
          "description",
          "declaredWhen",
          "timeBasis",
          "digitalSourceType",
          "softwareAgent",
          "relationship",
          "format",
          "changed",
          "sourceAssertion",
          "relatedAssertionCount",
          "positionBasis"
        ],
        "properties": {
          "sequence": {
            "type": "integer",
            "minimum": 1,
            "maximum": 120
          },
          "kind": {
            "enum": ["ingredient", "action", "signature"]
          },
          "label": {
            "type": "string",
            "maxLength": 500
          },
          "description": {
            "type": "string",
            "maxLength": 500
          },
          "declaredWhen": {
            "type": "string",
            "maxLength": 80
          },
          "timeBasis": {
            "enum": [
              "not-provided",
              "manifest-declared-untrusted",
              "trusted-time-stamp",
              "validated-time-stamp",
              "signature-time-unverified"
            ]
          },
          "digitalSourceType": {
            "type": "string",
            "maxLength": 500
          },
          "softwareAgent": {
            "type": "string",
            "maxLength": 500
          },
          "relationship": {
            "type": "string",
            "maxLength": 80
          },
          "format": {
            "type": "string",
            "maxLength": 120
          },
          "changed": {
            "type": "boolean"
          },
          "sourceAssertion": {
            "type": "string",
            "maxLength": 180
          },
          "relatedAssertionCount": {
            "type": "integer",
            "minimum": 0,
            "maximum": 120
          },
          "positionBasis": {
            "enum": [
              "ingredient-reference",
              "manifest-action-order",
              "signature-stage"
            ]
          }
        }
      }
    },
    "statistics": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "actionCount",
        "ingredientCount",
        "signatureCount",
        "datedEventCount",
        "manifestDeclaredTimeCount",
        "trustedTimestampCount"
      ],
      "properties": {
        "actionCount": {
          "type": "integer",
          "minimum": 0,
          "maximum": 120
        },
        "ingredientCount": {
          "type": "integer",
          "minimum": 0,
          "maximum": 120
        },
        "signatureCount": {
          "type": "integer",
          "minimum": 0,
          "maximum": 1
        },
        "datedEventCount": {
          "type": "integer",
          "minimum": 0,
          "maximum": 120
        },
        "manifestDeclaredTimeCount": {
          "type": "integer",
          "minimum": 0,
          "maximum": 120
        },
        "trustedTimestampCount": {
          "type": "integer",
          "minimum": 0,
          "maximum": 1
        }
      }
    },
    "boundaries": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "chronologyProven",
        "manifestActionTimesTrusted",
        "timestampTrustDerivedFromValidationCodes",
        "undatedEventsReordered",
        "rawManifestIncluded",
        "sourceFileIncluded"
      ],
      "properties": {
        "chronologyProven": {
          "const": false
        },
        "manifestActionTimesTrusted": {
          "const": false
        },
        "timestampTrustDerivedFromValidationCodes": {
          "const": true
        },
        "undatedEventsReordered": {
          "const": false
        },
        "rawManifestIncluded": {
          "const": false
        },
        "sourceFileIncluded": {
          "const": false
        }
      }
    }
  }
}
