{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$defs": {
    "EntryRef": {
      "properties": {
        "root_id": {
          "type": "string"
        },
        "space_id": {
          "type": "string"
        },
        "position": {
          "type": "integer"
        }
      },
      "type": "object",
      "required": [
        "root_id",
        "space_id",
        "position"
      ],
      "description": "EntryRef is the occurrence identity of one entry: a position in one journal."
    },
    "Justification": {
      "properties": {
        "group": {
          "type": "string"
        },
        "premises": {
          "items": {
            "$ref": "#/$defs/EntryRef"
          },
          "type": "array"
        },
        "method": {
          "type": "string"
        }
      },
      "type": "object",
      "required": [
        "group",
        "premises",
        "method"
      ],
      "description": "Justification joins a group of premises that jointly justify a declaration: each premise becomes one justifies fact, and the group id joins them."
    },
    "Path": {
      "items": {
        "type": "string"
      },
      "type": "array",
      "description": "Path is a location in the world: labels from a root organizer down, relative to the world."
    },
    "Relation": {
      "properties": {
        "kind": {
          "type": "string"
        },
        "target": {
          "$ref": "#/$defs/EntryRef"
        }
      },
      "type": "object",
      "required": [
        "kind",
        "target"
      ],
      "description": "Relation names a declaration's relation to another occurrence: supersedes, challenges or withdraws."
    }
  },
  "properties": {
    "operation_id": {
      "type": "string"
    },
    "artifact": {
      "$ref": "#/$defs/Path"
    },
    "subject": {
      "type": "string"
    },
    "statement": true,
    "evidence": {
      "items": {
        "$ref": "#/$defs/EntryRef"
      },
      "type": "array"
    },
    "justifications": {
      "items": {
        "$ref": "#/$defs/Justification"
      },
      "type": "array"
    },
    "relations": {
      "items": {
        "$ref": "#/$defs/Relation"
      },
      "type": "array"
    }
  },
  "type": "object",
  "required": [
    "operation_id",
    "artifact",
    "statement"
  ],
  "title": "DeclareRequest",
  "description": "DeclareRequest adds one immutable assertion about an artifact's exact content."
}
