{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://animakind.org/schemas/v3/binding-designation.json",
  "title": "Animakind Binding Designation Record",
  "description": "Canonical record for a Unique Animakind Binding (UAB) designation: the pairing of a design with an engine, coined by the Studio. Source: the specification, Section 3 and Appendix A.",
  "type": "object",
  "required": ["$schema", "designation", "design", "engineering"],
  "properties": {
    "$schema": { "const": "https://animakind.org/schemas/v3/binding-designation.json" },
    "designation": {
      "description": "UAB designation: [studio]_[family]-[mark]_v[build].[revision]_[strike date]. Studio, Family, a version and a Strike Date are required; Mark is optional; Strike Date is YYYYMMDD, the date minted (one that exists): the date of the timestamp of the UCR entry that records the advance (at genesis, of T0), in the zone declared with the genesis record, and every advance mints a new one (Section 3.2). A Mark advance re-bases the designation, which restarts at v1.0; a Build advance sets the Revision to 0 (v1.1 becomes v2.0). The Studio coins the Binding. The Family is the Binding Name; a change of it is a FAMILY_MIGRATION of the same subject, not a new individual. Only a divergence continued as a second line mints a new UII. The Studio, the Family and the Mark are each 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 (Deep Blue: deepblue; Section 3.2; the pattern checks capitals A-Z only). Segments may be in any script; none 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-]+(-[^\\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)$",
      "examples": ["lyceum_mariposa-blue_v2.0_20260804"]
    },
    "design": {
      "description": "The Design axis. Mirrors the design designation [company]_[product line]-[product mark]_v[product version] (Section 3.1).",
      "type": "object",
      "required": ["type", "studio", "designation", "product_line", "product_version"],
      "properties": {
        "type": {
          "description": "Design Type: the class of designed identity artifact. Open set; in this generation an Animagraph (Section 3.3). A change of Type advances the Mark.",
          "type": "string",
          "examples": ["Animagraph"]
        },
        "studio": {
          "description": "The organization that authored the design and coins the Binding. Same party the design designation names as Company.",
          "type": "string"
        },
        "designation": {
          "description": "The design designation: [company]_[product line]-[product mark]_v[product version] (Section 3.1). The Company, the Product Line and the Product Mark are each 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 (Section 3.1; the pattern checks capitals A-Z only). Segments may be in any script; none 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-]+(-[^\\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]+$",
          "examples": ["lyceum_aristotle_v1.0"]
        },
        "product_line": { "description": "Design lineage. Registered once, never altered.", "type": "string" },
        "product_mark": {
          "description": "Optional design-side generation marker. Null when absent; a designation without one is well-formed.",
          "type": ["string", "null"]
        },
        "product_version": {
          "description": "Version of the design as released, v[major].[minor]; recorded here without the leading v, as in Appendix A.",
          "type": "string",
          "pattern": "^[0-9]+\\.[0-9]+$"
        }
      },
      "additionalProperties": false
    },
    "engineering": {
      "description": "The engine's own designation, recorded as its manufacturer publishes it. Must carry at minimum a Manufacturer, an engine identifier, and that manufacturer's version (Section 3.2). A field the manufacturer does not publish is marked absent (null), not guessed.",
      "type": "object",
      "required": ["manufacturer", "engine", "version"],
      "properties": {
        "type": {
          "description": "Engineering Type: class of computational system. Open set; at present a large language model (Section 3.3). A change of Type advances the Mark.",
          "type": ["string", "null"],
          "examples": ["large-language-model"]
        },
        "manufacturer": { "type": "string" },
        "engine": { "description": "The Manufacturer's published model identifier with any snapshot or date suffix removed; any change to it is a new engine (Section 3.2).", "type": "string" },
        "version": { "description": "The Engine Version: a snapshot or version string published under an unchanged engine identifier; null (absent) where none is published. A change advances the Revision (Section 3.2).", "type": ["string", "null"] }
      },
      "additionalProperties": false
    },
    "supersedes": {
      "description": "The UAB designation this one replaces. Null only for the subject's designation at genesis.",
      "type": ["string", "null"],
      "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)$"
    },
    "advancement": {
      "description": "Which field advanced and why (Section 3.3, Table 4: Mark <- Design Type, Studio, Engineering Type, Manufacturer; Build <- a new engine from the same Manufacturer, major design change; Revision <- minor design change, Engine Version). A Mark advance takes precedence and re-bases the designation, which restarts at v1.0. A Build advance sets the Revision to 0 (v1.1 becomes v2.0). Every advance mints a new designation with a new Strike Date. The Family never advances: a change of Family (the Binding Name) is a FAMILY_MIGRATION of the same subject, with the same UII and a whole-number UIV advance, and its new designation keeps the Mark and also starts at v1.0, with a new Strike Date (Section 3.3, Table 5).",
      "type": "object",
      "required": ["field", "cause"],
      "properties": {
        "field": { "description": "\"family\" records a FAMILY_MIGRATION: the Binding Name is replaced, not advanced, and the designation keeps its Mark and restarts at v1.0.", "enum": ["mark", "build", "revision", "family"] },
        "cause": {
          "description": "The trigger, named from the advancement table. The paper's only worked value is \"engine\"; the remaining token spellings are not fixed by the paper.",
          "type": "string",
          "examples": ["engine"]
        }
      },
      "additionalProperties": false
    }
  },
  "additionalProperties": false
}
