{
"id": "eu.leksis.entry",
"defs": {
"main": {
"key": "tid",
"type": "record",
"record": {
"type": "object",
"required": [
"languageID",
"orthography",
"categories",
"definitions",
"createdAt"
],
"properties": {
"todo": {
"type": "array",
"items": {
"type": "string",
"maxLength": 2048,
"maxGraphemes": 1024
},
"maxLength": 64,
"description": "Pending-work notes: each item is one task this version still needs (e.g. an ingestion bot flagging one unverified aspect), so several bots or editors can each track their own item. Empty or absent means nothing is pending. The AppView indexes only whether any item exists, as a boolean flag."
},
"deleted": {
"type": "boolean",
"description": "Marks this version as a deletion: the entry is withdrawn from search under this record, but stays reachable at its entryKey for legacy links and to contest the deletion. Requires `deletionReason`. `orthography`/`categories`/`definitions` still carry the version's last known content (or may repeat the prior version's), since the lexicon requires them, but the AppView excludes a deleted version's orthography from the search index."
},
"subject": {
"type": "string",
"format": "at-uri",
"description": "AT URI of the entry record version this record modifies. Absent for a brand-new entry; present on a proposed modification, so the AppView can attach this version to the existing entry."
},
"botSource": {
"type": "string",
"maxLength": 2048,
"description": "Identifier of the external source this record was derived from (a URL or a source-internal ID), set by ingestion bots so a record can be traced back to its origin for maintenance. Not indexed by the AppView — it lives on the record only."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Client-declared creation time of this record version."
},
"categories": {
"type": "array",
"items": {
"ref": "#annotation",
"type": "ref"
},
"description": "Ordered grammatical categories of the entry (e.g. \"n.\"/\"noun\", \"f.\"/\"feminine\"). Freeform, not an enforced vocabulary."
},
"languageID": {
"type": "string",
"maxLength": 64,
"description": "Well-formed IETF BCP 47 tag of the entry's language, normalized to lowercase (e.g. \"br\", \"br-gw\")."
},
"redirectTo": {
"type": "string",
"maxLength": 254,
"description": "When `deleted` is true and the reason is a duplicate, the entryKey of the correct entry to redirect readers to."
},
"definitions": {
"type": "array",
"items": {
"ref": "#definition",
"type": "ref"
},
"minLength": 1,
"description": "The entry's definitions as a flat list, each carrying its coordinate (`place`) in a hierarchy of up to three dimensions. The array is sorted by `place` (lexicographic reading order). Coordinates are meaningful: future fields reference a definition by its place."
},
"orthography": {
"type": "array",
"items": {
"type": "string",
"maxLength": 256,
"maxGraphemes": 128
},
"minLength": 1,
"description": "Valid spellings of the word: variants, archaic forms, regional spellings. The first item is the canonical form."
},
"deletionReason": {
"type": "string",
"maxLength": 2048,
"description": "Required when `deleted` is true: why this entry was withdrawn (e.g. \"duplicate of br-gwerzenn-1b76\", \"not an attested word\").",
"maxGraphemes": 1024
}
}
},
"description": "A dictionary entry of the Leksis dictionary. Records prove authorship, not ownership: any user may publish an entry record, and a record carrying a `subject` reference is a proposed new version of the entry that record belongs to — the AppView treats the latest version as current and archives previous ones. The record is the source of truth for its content; the AppView indexes only what search needs."
},
"annotation": {
"type": "object",
"required": [
"long"
],
"properties": {
"long": {
"type": "string",
"maxLength": 256,
"description": "Full form (e.g. \"noun\", \"botany\") — the only required half: a lone form is always the full one, displayed directly with nothing revealed on hover.",
"maxGraphemes": 128
},
"short": {
"type": "string",
"maxLength": 64,
"description": "Optional abbreviated display form (e.g. \"n.\", \"bot.\"); when present it is shown instead of the full form, which appears on hover.",
"maxGraphemes": 32
}
}
},
"definition": {
"type": "object",
"required": [
"place",
"notes",
"text"
],
"properties": {
"text": {
"type": "string",
"maxLength": 4096,
"description": "The definition text.",
"maxGraphemes": 2048
},
"notes": {
"type": "array",
"items": {
"ref": "#annotation",
"type": "ref"
},
"description": "Ordered lexicographic notes shown before the definition text (e.g. \"by ext.\"/\"by extension\", \"arch.\"/\"archaic\"). May be empty."
},
"place": {
"type": "array",
"items": {
"type": "integer",
"minimum": 0
},
"maxLength": 3,
"minLength": 1,
"description": "Coordinate of the definition in the entry's hierarchy: one 0-based index per dimension, deepest last, so the length is the definition's own depth (e.g. [0] = first top-level definition; [1, 0] = first sub-definition of the second). Across the entry, places must be sorted, sibling indices contiguous from 0, and no place a prefix of another (a definition cannot also be a group). Display numbering follows the deepest place length used: 1 → arabic; 2 → roman, arabic; 3 → letters, roman, arabic."
}
}
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}