{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://e2er.com/catalog/schema/person.schema.json",
  "title": "E2ER contributor profile",
  "description": "A person or group credited for building blocks. Contributions are attached to blocks (block.contributors); uses, forks and citations are derived from the registry, never entered by hand.",
  "type": "object",
  "required": [
    "id",
    "name",
    "kind",
    "fictional"
  ],
  "additionalProperties": false,
  "properties": {
    "id": {
      "type": "string",
      "pattern": "^person:[a-z0-9][a-z0-9-]*$"
    },
    "name": {
      "type": "string"
    },
    "kind": {
      "enum": [
        "person",
        "group"
      ]
    },
    "fictional": {
      "type": "boolean",
      "description": "True for invented researchers shown to illustrate profiles. Rendered with an Illustration label."
    },
    "orcid": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{4}-\\d{4}-\\d{3}[\\dX]$"
    },
    "affiliation": {
      "type": "string"
    },
    "disciplines": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "bio": {
      "type": "string"
    },
    "members": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "For groups: named maintainers as the source records them."
    },
    "github": {
      "type": "string",
      "pattern": "^[a-z0-9][a-z0-9-]{0,38}$",
      "description": "GitHub login; profiles live at /<login>."
    },
    "memberOf": {
      "type": "array",
      "items": {
        "type": "string",
        "pattern": "^person:"
      },
      "description": "Groups this person belongs to. Reuse within one's own groups is not counted as reuse by others."
    }
  }
}