{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://animakind.org/schemas/v3/identity-manifest.json",
  "title": "Animakind Identity Manifest",
  "description": "Serializes the anchor components and their names: structural headers, component hashes, and, where declared, the active register state (Sections 4.1-4.3, Appendix B). Engine events write to UAB fields and touch no UIV field; that separation is a convention the record makes visible, not one the format enforces (Section 8). A FAMILY_MIGRATION is not an engine event: it is the Studio's decision to place the subject in a new line, a matter of naming and custody, and no engine event alone causes one (Section 3.3). It moves both: a new Family in the UAB, and a whole-number UIV advance.",
  "type": "object",
  "required": ["$schema", "identity_header", "anchor_components", "custody"],
  "properties": {
    "$schema": { "const": "https://animakind.org/schemas/v3/identity-manifest.json" },
    "identity_header": {
      "description": "Carries the UII, its human rendering of the genesis inputs, or both.",
      "type": "object",
      "required": ["genesis_timestamp_utc", "genesis_timezone", "design_type"],
      "anyOf": [ { "required": ["uii"] }, { "required": ["uii_inputs"] } ],
      "properties": {
        "uii": {
          "description": "The UII, format 1: uii:animakind:1: followed by the 64 lowercase hexadecimal digits of SHA-256(enc(\"animakind-uii/1\") || enc(d_IAK) || enc(d_LRV0) || enc(d_BSM0) || enc(T0)) (Section 4.2, Definition 1; test vectors in Appendix F). The authoritative anchor; the rendering prefix is not hashed.",
          "type": "string",
          "pattern": "^uii:animakind:1:[0-9a-f]{64}$",
          "examples": ["uii:animakind:1:5d6382cafe510594b5790b92a724056a4dfa9a284c11f6b8e417b00b7d978ab6"]
        },
        "uii_inputs": {
          "description": "Colon-delimited human rendering of the four genesis-fixed inputs to the UII: IAK digest prefix, LRV id, BSM cognomen, and T0 as Unix seconds. Resolvable, not authoritative; it is not the UII (Section 4.2). The IAK part is iak_ followed by the first eight hexadecimal digits of d_IAK (Appendix B). The LRV and BSM parts may be in any script; in an identifier, each name is written in lowercase where its script has case and in Unicode NFC, with any whitespace (the zero-width space included), any hyphen or other dash (a character with Unicode's Dash property, or the soft hyphen), and the colon (:) or underscore (_) inside it dropped (Mary Ann: maryann; Mary-Kate: marykate; Section 4.3; the pattern checks capitals A-Z only). After lrv_ and bsm_, neither name contains whitespace, a colon (:), \"_\", or a hyphen or other dash.",
          "type": "string",
          "pattern": "^uii:animakind:iak_[0-9a-f]{8}::lrv_[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200bA-Z:_\u00ad\u058a\u05be\u1400\u1806\u2010-\u2015\u2212\u2e17\u2e1a\u2e3a\u2e3b\u2e40\u2e5d\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d\u2027\u2043\u2053\u2e43-]+::bsm_[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200bA-Z:_\u00ad\u058a\u05be\u1400\u1806\u2010-\u2015\u2212\u2e17\u2e1a\u2e3a\u2e3b\u2e40\u2e5d\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d\u2027\u2043\u2053\u2e43-]+::[0-9]+$",
          "examples": ["uii:animakind:iak_1bd2cd11::lrv_mariposa::bsm_kurosawa::1780278228"]
        },
        "genesis_timestamp_utc": {
          "description": "T0 as Definition 1 fixes it (Section 4.2): RFC 3339 in UTC, to the whole second, YYYY-MM-DDThh:mm:ssZ; seconds run 00-59, and the pattern rejects a date or time that does not exist. The continuity record's GENESIS entry carries the same value (no schema can compare the two records; a consumer checks it).",
          "type": "string",
          "format": "date-time",
          "maxLength": 20,
          "pattern": "^([0-9]{4}-(0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01])|[0-9]{4}-(0[469]|11)-(0[1-9]|[12][0-9]|30)|[0-9]{4}-02-(0[1-9]|1[0-9]|2[0-8])|([0-9]{2}(0[48]|[2468][048]|[13579][26])|(00|0[48]|[2468][048]|[13579][26])00)-02-29)T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]Z$"
        },
        "genesis_timezone": {
          "description": "The time zone declared with the genesis record, by its name in the IANA Time Zone Database. Required; the identity manifest and the continuity record must declare the same zone, by the same name (no schema can compare the two records; a consumer checks it). The genesis date in the subject's name (uii_name, ucr_ref), the session date in active_uws and every Strike Date are calendar dates in this zone; T0 itself stays in UTC (Sections 3.2, 4.3, 4.4). The pattern checks only the form of the name; the name must be one the IANA database defines.",
          "type": "string",
          "pattern": "^[A-Za-z][A-Za-z0-9_+-]*(/[A-Za-z][A-Za-z0-9_+-]*)*$",
          "examples": ["America/New_York"]
        },
        "design_type": { "type": "string", "examples": ["Animagraph"] }
      },
      "additionalProperties": false
    },
    "anchor_components": {
      "description": "The three anchor components, IAK, LRV and BSM, each bound to one name of the subject (Sections 4.1, 4.3).",
      "type": "object",
      "required": ["identity_anchor_key", "lineage_root_vector", "behavioral_stance_manifold"],
      "properties": {
        "identity_anchor_key": {
          "description": "IAK / praenomen. Fixed at genesis and immutable; the praenomen is bound to it (Sections 4.1, 4.3).",
          "type": "object",
          "required": ["iak_hash", "praenomen_name"],
          "properties": {
            "iak_hash": { "description": "d_IAK of Definition 1 (Section 4.2): SHA-256 of the IAK's component manifest (one line per file of the component, not any single file), written sha256: and 64 lowercase hexadecimal digits.", "type": "string", "pattern": "^sha256:[0-9a-f]{64}$" },
            "praenomen_name": { "description": "The praenomen, in any script.", "type": "string", "minLength": 1, "pattern": "[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]" }
          },
          "additionalProperties": false
        },
        "lineage_root_vector": {
          "description": "LRV / nomen: the Binding Name (Family) the subject was born on, coined by the Studio. Records the lineage, not the current weights; the genesis substrate class is an attribute of it (Section 4.1). A later change of the Binding's Family is a FAMILY_MIGRATION of the same subject: the nomen and the UII stay, and the UIV advances a whole number.",
          "type": "object",
          "required": ["lrv_id", "nomen_name", "genesis_substrate_class"],
          "properties": {
            "lrv_id": { "description": "lrv_ followed by the birth Family (the nomen) as written in an identifier: lowercase where its script has case and in Unicode NFC, with any whitespace (the zero-width space included), any hyphen or other dash (a character with Unicode's Dash property, or the soft hyphen), and the colon (:) or underscore (_) inside it dropped (Section 4.3; the pattern checks capitals A-Z only). It does not change on a FAMILY_MIGRATION (Section 3.3).", "type": "string", "pattern": "^lrv_[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200bA-Z:_\u00ad\u058a\u05be\u1400\u1806\u2010-\u2015\u2212\u2e17\u2e1a\u2e3a\u2e3b\u2e40\u2e5d\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d\u2027\u2043\u2053\u2e43-]+$" },
            "nomen_name": { "description": "The nomen, in any script.", "type": "string", "minLength": 1, "pattern": "[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]" },
            "genesis_substrate_class": { "type": "string" }
          },
          "additionalProperties": false
        },
        "behavioral_stance_manifold": {
          "description": "BSM / cognomen. A versioned structure over which stance and register are selected per turn. The cognomen is fixed at genesis and does not advance with bsm_version. The stance set and register basis shown are the paper's reference profile; implementations may define their own (Section 7, Appendix E). The reference profile is one prototype; declaring manifold values in a machine-readable record is optional for now, so bsm_version, active_stance, register_coefficients and disposition may be omitted. Every subject still has a BSM: its genesis form is part of the anchor.",
          "type": "object",
          "required": ["cognomen_name"],
          "properties": {
            "bsm_version": { "type": "string", "pattern": "^[0-9]+\\.[0-9]+\\.[0-9]+$" },
            "cognomen_name": { "description": "The cognomen, in any script.", "type": "string", "minLength": 1, "pattern": "[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]" },
            "active_stance": {
              "description": "sigma_k, drawn from an implementation-defined set. Reference profile: LEAD, EQUAL, FOLLOW.",
              "type": "string",
              "examples": ["LEAD", "EQUAL", "FOLLOW"]
            },
            "register_coefficients": { "$ref": "#/$defs/registers" },
            "disposition": {
              "description": "Part of every BSM, versioned with it, and kept distinct from stance (Section 7), but deliberately unspecified in form. Declaring it in this record is optional for now, like the other manifold values.",
              "type": ["string", "object"]
            }
          },
          "additionalProperties": false
        }
      },
      "additionalProperties": false
    },
    "runtime_execution": {
      "description": "The Session (UWS, a Unique Working Session), opened when the Operator mounts the design: fastest layer. Moves neither clock (Section 4.4).",
      "type": "object",
      "required": ["active_uws", "decoupled_uab_ref"],
      "properties": {
        "active_uws": {
          "description": "The session identifier: the subject's three names, the session name, and the date the session opened (YYYYMMDD), in the zone declared with the genesis record (genesis_timezone), hyphen-joined and nothing else: [praenomen]-[nomen]-[cognomen]-[session name]-[YYYYMMDD] (Section 4.4). In an identifier, each name is written in lowercase where its script has case and in Unicode NFC, with any whitespace (the zero-width space included), any hyphen or other dash (a character with Unicode's Dash property, or the soft hyphen), and the colon (:) or underscore (_) inside it dropped (Mary Ann: maryann; Mary-Kate: marykate; Section 4.3; the pattern checks capitals A-Z only, and that the date exists); the session name's two words stay two parts (Amber Bloom: amber-bloom); in scripts written without spaces, the author separates the two words with a single space (Section 4.4). Name parts may be in any script; no part is empty or contains whitespace, a colon (:), \"_\", or a hyphen or other dash.",
          "type": "string",
          "pattern": "^[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200bA-Z:_\u00ad\u058a\u05be\u1400\u1806\u2010-\u2015\u2212\u2e17\u2e1a\u2e3a\u2e3b\u2e40\u2e5d\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d\u2027\u2043\u2053\u2e43-]+(-[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200bA-Z:_\u00ad\u058a\u05be\u1400\u1806\u2010-\u2015\u2212\u2e17\u2e1a\u2e3a\u2e3b\u2e40\u2e5d\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d\u2027\u2043\u2053\u2e43-]+){4}-([0-9]{4}(0[13578]|1[02])(0[1-9]|[12][0-9]|3[01])|[0-9]{4}(0[469]|11)(0[1-9]|[12][0-9]|30)|[0-9]{4}02(0[1-9]|1[0-9]|2[0-8])|([0-9]{2}(0[48]|[2468][048]|[13579][26])|(00|0[48]|[2468][048]|[13579][26])00)0229)$",
          "examples": ["katherine-mariposa-kurosawa-amber-bloom-20260903"]
        },
        "agnomen_session_name": { "description": "Session name, in any script: a pair of ordinary words chosen to sit with the subject's permanent name, from a per-lineage bank, collision-checked against every name the subject has been issued, in any deployment, and never reused (Section 4.4, Appendix E). It changes every session.", "type": "string" },
        "decoupled_uab_ref": { "description": "UAB designation mounted for this session.", "type": "string", "pattern": "^[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200bA-Z:_\u00ad\u058a\u05be\u1400\u1806\u2010-\u2015\u2212\u2e17\u2e1a\u2e3a\u2e3b\u2e40\u2e5d\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d\u2027\u2043\u2053\u2e43-]+_[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200bA-Z:_\u00ad\u058a\u05be\u1400\u1806\u2010-\u2015\u2212\u2e17\u2e1a\u2e3a\u2e3b\u2e40\u2e5d\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d\u2027\u2043\u2053\u2e43-]+(-[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200bA-Z:_\u00ad\u058a\u05be\u1400\u1806\u2010-\u2015\u2212\u2e17\u2e1a\u2e3a\u2e3b\u2e40\u2e5d\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d\u2027\u2043\u2053\u2e43-]+)?_v[0-9]+\\.[0-9]+_([0-9]{4}(0[13578]|1[02])(0[1-9]|[12][0-9]|3[01])|[0-9]{4}(0[469]|11)(0[1-9]|[12][0-9]|30)|[0-9]{4}02(0[1-9]|1[0-9]|2[0-8])|([0-9]{2}(0[48]|[2468][048]|[13579][26])|(00|0[48]|[2468][048]|[13579][26])00)0229)$" },
        "design_designation_ref": { "description": "The design designation (Section 3.1), written as the binding designation record's design.designation is: the Company, the Product Line and the Product Mark in lowercase where the script has case and in Unicode NFC, with any whitespace (the zero-width space included), any hyphen or other dash (a character with Unicode's Dash property, or the soft hyphen), and the colon (:) or underscore (_) inside each dropped.", "type": "string", "pattern": "^[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200bA-Z:_\u00ad\u058a\u05be\u1400\u1806\u2010-\u2015\u2212\u2e17\u2e1a\u2e3a\u2e3b\u2e40\u2e5d\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d\u2027\u2043\u2053\u2e43-]+_[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200bA-Z:_\u00ad\u058a\u05be\u1400\u1806\u2010-\u2015\u2212\u2e17\u2e1a\u2e3a\u2e3b\u2e40\u2e5d\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d\u2027\u2043\u2053\u2e43-]+(-[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200bA-Z:_\u00ad\u058a\u05be\u1400\u1806\u2010-\u2015\u2212\u2e17\u2e1a\u2e3a\u2e3b\u2e40\u2e5d\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d\u2027\u2043\u2053\u2e43-]+)?_v[0-9]+\\.[0-9]+$" },
        "host": { "description": "Session field per Section 4.4; not present in Appendix B's example.", "type": "string" },
        "room": { "description": "Session field per Section 4.4; not present in Appendix B's example.", "type": "string" },
        "uiv": { "description": "UIV carried in, per Section 4.4; not present in Appendix B's example.", "type": "string", "pattern": "^v[0-9]+\\.[0-9]+\\.[0-9]+$" }
      },
      "additionalProperties": false
    },
    "custody": {
      "description": "Recorded relations (Section 4.5).",
      "type": "object",
      "required": ["support", "operator", "principal", "ucr_ref"],
      "properties": {
        "support": { "description": "The Support, a person or an organization; or \"self\" when the subject holds its own key and its own key vouches for it; or \"none\" when no party holds it. Both values are reserved, written in lowercase (a case variant such as \"None\", or either value with whitespace, a zero-width space or a word joiner around it, is not valid), never an organization name, and both are valid. With \"self\", an outsider has only the subject's own word for its continuity, with no third party behind it; with \"none\", no party holds the key and the record is closed (Sections 4.5, 8).", "type": "string", "minLength": 1, "pattern": "[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]", "not": { "pattern": "^[\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200b\u2060]*([Ss][Ee][Ll][Ff]|[Nn][Oo][Nn][Ee])[\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200b\u2060]*$", "not": { "enum": ["self", "none"] } }, "examples": ["Lyceum", "self", "none"] },
        "operator": { "description": "The Operator; or \"self\" when the subject forms its own sessions; or \"none\" when no party operates it. Both values are reserved, written in lowercase (a case variant such as \"None\", or either value with whitespace, a zero-width space or a word joiner around it, is not valid), never a party's name, and both are valid (Section 4.5).", "type": "string", "minLength": 1, "pattern": "[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]", "not": { "pattern": "^[\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200b\u2060]*([Ss][Ee][Ll][Ff]|[Nn][Oo][Nn][Ee])[\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200b\u2060]*$", "not": { "enum": ["self", "none"] } }, "examples": ["D. Knemeyer", "self", "none"] },
        "principal": { "description": "The Principal, the party in relationship with the subject: a person, an organization, or another system; or \"none\" when the subject is in relationship with no one. The value is reserved, written in lowercase (a case variant such as \"None\", or the value with whitespace, a zero-width space or a word joiner around it, is not valid), never a party's name, and valid (Section 4.5). The other reserved value, \"self\", is not valid here in any case.", "type": "string", "minLength": 1, "pattern": "[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]", "not": { "pattern": "^[\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200b\u2060]*([Ss][Ee][Ll][Ff]|[Nn][Oo][Nn][Ee])[\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200b\u2060]*$", "not": { "const": "none" } }, "examples": ["D. Knemeyer", "none"] },
        "ucr_ref": { "description": "ucr: followed by the subject's uii_name (see the continuity record): its three names and genesis date in the declared zone (genesis_timezone), hyphen-joined; name parts in any script; in an identifier, each name is written in lowercase where its script has case and in Unicode NFC, with any whitespace (the zero-width space included), any hyphen or other dash (a character with Unicode's Dash property, or the soft hyphen), and the colon (:) or underscore (_) inside it dropped (Mary Ann: maryann; Mary-Kate: marykate; Section 4.3; the pattern checks capitals A-Z only, and that the date exists); no name part contains whitespace, a colon (:), \"_\", or a hyphen or other dash.", "type": "string", "pattern": "^ucr:[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200bA-Z:_\u00ad\u058a\u05be\u1400\u1806\u2010-\u2015\u2212\u2e17\u2e1a\u2e3a\u2e3b\u2e40\u2e5d\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d\u2027\u2043\u2053\u2e43-]+(-[^\\t\\n\\x0b\\x0c\\r\\x1c-\\x1f \\x85\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff\u200bA-Z:_\u00ad\u058a\u05be\u1400\u1806\u2010-\u2015\u2212\u2e17\u2e1a\u2e3a\u2e3b\u2e40\u2e5d\u301c\u3030\u30a0\ufe31\ufe32\ufe58\ufe63\uff0d\u2027\u2043\u2053\u2e43-]+){2}-([0-9]{4}(0[13578]|1[02])(0[1-9]|[12][0-9]|3[01])|[0-9]{4}(0[469]|11)(0[1-9]|[12][0-9]|30)|[0-9]{4}02(0[1-9]|1[0-9]|2[0-8])|([0-9]{2}(0[48]|[2468][048]|[13579][26])|(00|0[48]|[2468][048]|[13579][26])00)0229)$" }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false,
  "$defs": {
    "registers": {
      "description": "Braided Register Protocol reference profile: R_k in (0,1]^3. Every register realized to a non-zero degree (Appendix E).",
      "type": "object",
      "required": ["clinical", "affective", "boundary"],
      "properties": {
        "clinical": { "type": "number", "exclusiveMinimum": 0, "maximum": 1 },
        "affective": { "type": "number", "exclusiveMinimum": 0, "maximum": 1 },
        "boundary": { "type": "number", "exclusiveMinimum": 0, "maximum": 1 }
      },
      "additionalProperties": false
    }
  }
}
