{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:orbiplex:schema:corpus-reasoning-room-invite:v1",
  "title": "Corpus Reasoning Room Invite v1",
  "type": "object",
  "additionalProperties": false,
  "required": [
    "schema/v",
    "invite/id",
    "query/id",
    "room/id",
    "subject",
    "transport",
    "room-policy",
    "membership-attestation",
    "policy/digest",
    "access/list",
    "grants",
    "recipient/node-id",
    "inviter/node-id",
    "issued-at",
    "expires-at",
    "signature"
  ],
  "properties": {
    "schema/v": { "const": 1 },
    "invite/id": {
      "type": "string",
      "pattern": "^corpus-room-invite:sha256:[A-Za-z0-9_-]{43}$"
    },
    "query/id": { "type": "string", "pattern": "^query:[^\\s]+$", "maxLength": 512 },
    "room/id": { "type": "string", "pattern": "^room:[^\\s]+$", "maxLength": 512 },
    "subject": { "$ref": "corpus-reasoning-room-policy.v1.schema.json#/$defs/room-subject" },
    "transport": {
      "type": "object",
      "additionalProperties": false,
      "required": ["transport/kind", "transport/ref", "endpoint"],
      "properties": {
        "transport/kind": { "enum": ["wss-pubsub", "matrix-room"] },
        "transport/ref": {
          "type": "string",
          "pattern": "^room-live:[^\\s]+$",
          "maxLength": 512
        },
        "endpoint": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2048,
          "pattern": "^\\S+$"
        }
      }
    },
    "room-policy": { "$ref": "corpus-reasoning-room-policy.v1.schema.json" },
    "membership-attestation": { "$ref": "room-membership-attestation.v1.schema.json" },
    "policy/digest": {
      "type": "string",
      "pattern": "^sha256:[A-Za-z0-9_-]{43}$"
    },
    "access/list": {
      "type": "array",
      "minItems": 2,
      "maxItems": 16,
      "uniqueItems": true,
      "items": { "$ref": "corpus-reasoning-room-policy.v1.schema.json#/$defs/room-subject" }
    },
    "grants": {
      "type": "array",
      "minItems": 1,
      "maxItems": 6,
      "uniqueItems": true,
      "items": { "enum": ["answer", "delegate", "moderate", "observe", "speak", "vote"] }
    },
    "recipient/node-id": {
      "type": "string",
      "pattern": "^node:did:key:z[1-9A-HJ-NP-Za-km-z]+$",
      "maxLength": 512
    },
    "inviter/node-id": {
      "type": "string",
      "pattern": "^node:did:key:z[1-9A-HJ-NP-Za-km-z]+$",
      "maxLength": 512
    },
    "issued-at": { "type": "string", "format": "date-time" },
    "expires-at": { "type": "string", "format": "date-time" },
    "signature": {
      "type": "object",
      "additionalProperties": false,
      "required": ["alg", "value", "key/public"],
      "properties": {
        "alg": { "const": "ed25519+domain-v1" },
        "value": {
          "type": "string",
          "pattern": "^[A-Za-z0-9_-]{86}$"
        },
        "key/public": {
          "type": "string",
          "pattern": "^z[1-9A-HJ-NP-Za-km-z]+$",
          "maxLength": 128
        }
      }
    }
  },
  "x-dia-status": "accepted",
  "x-dia-basis": [
    "doc/project/40-proposals/069-corpus.md",
    "doc/project/60-solutions/036-room/036-room.md"
  ]
}
