{
"id": "net.anisota.spell.book",
"defs": {
"main": {
"key": "any",
"type": "record",
"record": {
"type": "object",
"required": [
"entries",
"updatedAt"
],
"properties": {
"entries": {
"type": "array",
"items": {
"ref": "#entry",
"type": "ref"
},
"description": "The user's spells, in display order, each referencing a net.anisota.spell.custom record in the same repo."
},
"updatedAt": {
"type": "string",
"format": "datetime",
"description": "When the spell book was last modified"
},
"activePresets": {
"type": "array",
"items": {
"type": "string",
"maxLength": 64
},
"description": "Legacy: identifiers of built-in preset spells the user had activated before presets were replaced by real shared spell records. Retained for backward compatibility."
}
}
},
"description": "The user's spell book: a single index record (stored at rkey 'self') that tracks which net.anisota.spell.custom records the user has, whether each is currently cast (active), and in what order they appear. The individual spell definitions live in the net.anisota.spell.custom collection; this record only references them by rkey, so casting/dismissing/reordering a spell touches only this small index rather than rewriting each spell."
},
"entry": {
"type": "object",
"required": [
"rkey"
],
"properties": {
"cast": {
"type": "boolean",
"description": "Whether the spell is currently cast (active). Defaults to false when absent."
},
"rkey": {
"type": "string",
"maxLength": 512,
"description": "Record key of the net.anisota.spell.custom record this entry points to, in the same repo."
},
"order": {
"type": "integer",
"minimum": 0,
"description": "Zero-based display order within the spell book."
}
},
"description": "A reference to one of the user's spells plus its cast state and position."
}
},
"$type": "com.atproto.lexicon.schema",
"lexicon": 1
}