page.cavu.book

cavu.page

Schema Diff

+30 -0

From

CID
bafyreifndwlsfwv...
Indexed At
2026-07-30 00:06 UTC
View this version

To

CID
bafyreieywynxgef...
Indexed At
2026-08-26 22:01 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 8 non-breaking changes.

Non-Breaking Changes (8)
  • AddedVertex AddedVertex { vertex_id: "page.cavu.book#styling" }
  • AddedVertex AddedVertex { vertex_id: "page.cavu.book#styling.pageSize" }
  • AddedVertex AddedVertex { vertex_id: "page.cavu.book.allowDownloads" }
  • AddedVertex AddedVertex { vertex_id: "page.cavu.book.styling" }
  • AddedEdge AddedEdge { src: "page.cavu.book", tgt: "page.cavu.book.allowDownloads", kind: "prop", name: Some("allowDownloads") }
  • AddedEdge AddedEdge { src: "page.cavu.book", tgt: "page.cavu.book.styling", kind: "prop", name: Some("styling") }
  • AddedEdge AddedEdge { src: "page.cavu.book#styling", tgt: "page.cavu.book#styling.pageSize", kind: "prop", name: Some("pageSize") }
  • AddedEdge AddedEdge { src: "page.cavu.book.styling", tgt: "page.cavu.book#styling", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "page.cavu.book#styling" }
  • AddedVertex { vertex_id: "page.cavu.book#styling.pageSize" }
  • AddedVertex { vertex_id: "page.cavu.book.allowDownloads" }
  • AddedVertex { vertex_id: "page.cavu.book.styling" }

Additional Notes

  • Non-breaking: AddedEdge { src: "page.cavu.book", tgt: "page.cavu.book.allowDownloads", kind: "prop", name: Some("allowDownloads") }
  • Non-breaking: AddedEdge { src: "page.cavu.book", tgt: "page.cavu.book.styling", kind: "prop", name: Some("styling") }
  • Non-breaking: AddedEdge { src: "page.cavu.book#styling", tgt: "page.cavu.book#styling.pageSize", kind: "prop", name: Some("pageSize") }
  • Non-breaking: AddedEdge { src: "page.cavu.book.styling", tgt: "page.cavu.book#styling", kind: "ref", name: None }
1 1
{
2 2
  "id": "page.cavu.book",
3 3
  "defs": {
4 4
    "main": {
5 5
      "type": "object",
6 6
      "required": [
7 7
        "spine"
8 8
      ],
9 9
      "properties": {
10 10
        "cover": {
11 11
          "type": "blob",
12 12
          "accept": [
13 13
            "image/*"
14 14
          ],
15 15
          "maxSize": 1000000,
16 16
          "description": "Book cover, typically portrait orientation. Share the same blob CID with the frontmatter document's coverImage."
17 17
        },
18 18
        "spine": {
19 19
          "type": "array",
20 20
          "items": {
21 21
            "ref": "#spineEntry",
22 22
            "type": "ref"
23 23
          },
24 24
          "maxLength": 10000,
25 25
          "description": "Ordered entries for the site.standard.document records holding the book's content, in reading order. Chunk boundaries are storage artifacts, invisible to the reader; a chunk is usually chapter-sized but not always."
26 26
        },
27 27
        "series": {
28 28
          "ref": "#seriesRef",
29 29
          "type": "ref",
30 30
          "description": "The series this book belongs to, if any."
31 31
        },
32 32
        "listing": {
33 33
          "type": "string",
34 34
          "format": "at-uri",
35 35
          "description": "AT-URI of a pub.byline.book record carrying this book's catalog metadata (editions, ISBNs, retailer links, genres). The reading layer stays here; the listing layer stays there."
36 36
        },
37 +
        "styling": {
38 +
          "ref": "#styling",
39 +
          "type": "ref",
40 +
          "description": "Author presentation preferences for the whole book — the floor of the theme layer. Optional; readers render legibly without it and ignore what they don't understand."
41 +
        },
37 42
        "coverAlt": {
38 43
          "type": "string",
39 44
          "maxLength": 5000,
40 45
          "description": "Alt text describing the cover image, for accessibility.",
41 46
          "maxGraphemes": 1000
42 47
        },
43 48
        "language": {
44 49
          "type": "string",
45 50
          "format": "language",
46 51
          "description": "Primary language of the book's content."
47 52
        },
48 53
        "contributors": {
49 54
          "type": "array",
50 55
          "items": {
51 56
            "ref": "pub.byline.defs#contributor",
52 57
            "type": "ref"
53 58
          },
54 59
          "maxLength": 100,
55 60
          "description": "Credited contributors (author, translator, editor, illustrator, narrator). Reuses byline.pub's contributor shape: name required, AT Protocol DID optional, so off-protocol collaborators can be credited. The repo owner is presumed primary author unless roles say otherwise."
56 61
        },
62 +
        "allowDownloads": {
63 +
          "type": "boolean",
64 +
          "description": "Whether readers may download the whole book as a file (EPUB, PDF) rather than only reading it in place. Absent means false — the author opts in. Readers and appviews that offer exports check this flag before generating one; the records themselves are public regardless, so this is a statement of intent, not access control."
65 +
        },
57 66
        "pageProgression": {
58 67
          "type": "string",
59 68
          "description": "Direction pages progress in paginated and two-page-spread views, mirroring EPUB's spine-level page-progression-direction. Absent means ltr; rtl for right-to-left books (manga). Chiefly meaningful for pre-paginated page.cavu.pages content, where it decides which side of a spread comes first and which way pages turn.",
60 69
          "knownValues": [
61 70
            "ltr",
62 71
            "rtl"
63 72
          ]
64 73
        },
65 74
        "completionStatus": {
66 75
          "type": "string",
67 76
          "description": "Whether the book is still being serialized.",
68 77
          "knownValues": [
69 78
            "ongoing",
70 79
            "completed",
71 80
            "hiatus"
72 81
          ]
73 82
        }
74 83
      },
75 84
      "description": "Book extension object, embedded in a site.standard.publication record as a pass-through `book` property (the Leaflet `theme` pattern). Its presence marks the publication as a book; series publications omit it. The publication's standard fields remain the fallback identity (name = title, description = blurb, icon = square mark)."
76 85
    },
86 +
    "styling": {
87 +
      "type": "object",
88 +
      "properties": {
89 +
        "pageSize": {
90 +
          "type": "string",
91 +
          "maxLength": 100,
92 +
          "description": "Printed page size for paginated exports (PDF) and print stylesheets, as a paper name: ISO a4/a5/b5, North American letter/legal, and the book-trade sizes trade (6×9 in), digest (5.5×8.5 in), and pocket (4.25×6.87 in). Absent means the exporter's default (trade). Screen readers ignore it — on-screen pages are a viewport artifact.",
93 +
          "knownValues": [
94 +
            "a4",
95 +
            "a5",
96 +
            "b5",
97 +
            "letter",
98 +
            "legal",
99 +
            "trade",
100 +
            "digest",
101 +
            "pocket"
102 +
          ]
103 +
        }
104 +
      },
105 +
      "description": "Presentation preferences the author sets once for the whole book. Readers apply what they understand and ignore the rest."
106 +
    },
77 107
    "seriesRef": {
78 108
      "type": "object",
79 109
      "required": [
80 110
        "publication"
81 111
      ],
82 112
      "properties": {
83 113
        "name": {
84 114
          "type": "string",
85 115
          "maxLength": 2560,
86 116
          "description": "Series name, denormalized for display without fetching the series publication.",
87 117
          "maxGraphemes": 256
88 118
        },
89 119
        "index": {
90 120
          "type": "integer",
91 121
          "minimum": 0,
92 122
          "description": "Position of this book within the series reading order."
93 123
        },
94 124
        "publication": {
95 125
          "type": "string",
96 126
          "format": "at-uri",
97 127
          "description": "AT-URI of the series' site.standard.publication record."
98 128
        }
99 129
      }
100 130
    },
101 131
    "spineEntry": {
102 132
      "type": "object",
103 133
      "required": [
104 134
        "document"
105 135
      ],
106 136
      "properties": {
107 137
        "roles": {
108 138
          "type": "array",
109 139
          "items": {
110 140
            "type": "string",
111 141
            "maxLength": 1000,
112 142
            "knownValues": [
113 143
              "cover",
114 144
              "frontmatter",
115 145
              "toc",
116 146
              "bodymatter",
117 147
              "backmatter",
118 148
              "acknowledgments",
119 149
              "appendix",
120 150
              "index",
121 151
              "glossary",
122 152
              "notes",
123 153
              "colophon"
124 154
            ],
125 155
            "maxGraphemes": 100
126 156
          },
127 157
          "maxLength": 10,
128 158
          "description": "Structural roles of this chunk, inspired by the EPUB structural semantics vocabulary. Readers use these to find special documents without fetching them — notably `toc`, which marks the document containing the page.cavu.blocks.toc block (the role EPUB's properties=\"nav\" manifest flag plays). Untagged entries are ordinary body matter."
129 159
        },
130 160
        "linear": {
131 161
          "type": "boolean",
132 162
          "description": "Whether this entry is part of the primary continuous reading flow; absent means true, mirroring EPUB's itemref linear attribute. False for supplementary material (appendices, indexes, notes) that should be reachable from the TOC but skipped when paginating straight through."
133 163
        },
134 164
        "document": {
135 165
          "type": "string",
136 166
          "format": "at-uri",
137 167
          "description": "AT-URI of the site.standard.document record holding this chunk's content."
138 168
        }
139 169
      }
140 170
    }
141 171
  },
142 172
  "$type": "com.atproto.lexicon.schema",
143 173
  "lexicon": 1
144 174
}

Compare Other Versions

Lexicon Garden

@