full diff

ink.resenha.defs

resenha.ink +6 −0
From
bafyreih5fzu4anpxsn3i2o2jia6q42vlpakd6enuutrg4ix3r6szsdxnhq indexed 2026-11-04 16:37 UTC View this version
To
bafyreicfbywmroxljvo4wfozq5v3ljohebicqwonttzvjg74lxybimsn7m indexed 2026-11-04 23:46 UTC View this version

Compatibility

backward compatible Backward compatible. 2 non-breaking changes.

Non-breaking changes (2)
  • AddedVertex AddedVertex { vertex_id: "ink.resenha.defs#bookRef.cover" }
  • AddedEdge AddedEdge { src: "ink.resenha.defs#bookRef", tgt: "ink.resenha.defs#bookRef.cover", kind: "prop", name: Some("cover") }

Migration guidance

Added

  • AddedVertex { vertex_id: "ink.resenha.defs#bookRef.cover" }

Notes

  • Non-breaking: AddedEdge { src: "ink.resenha.defs#bookRef", tgt: "ink.resenha.defs#bookRef.cover", kind: "prop", name: Some("cover") }

Changes

11{
22 "$type": "com.atproto.lexicon.schema",
33 "defs": {
44 "bookIdentifiers": {
55 "description": "A book's numbers in every catalogue that has it. Any one of them finds the book; together they tie the catalogues to each other.",
66 "properties": {
77 "asin": {
88 "description": "Amazon's, as Popfeed keeps it.",
99 "maxLength": 16,
1010 "type": "string"
1111 },
1212 "goodreadsId": {
1313 "maxLength": 32,
1414 "type": "string"
1515 },
1616 "hiveId": {
1717 "description": "BookHive's ID for the edition.",
1818 "maxLength": 64,
1919 "type": "string"
2020 },
2121 "isbn10": {
2222 "maxLength": 10,
2323 "type": "string"
2424 },
2525 "isbn13": {
2626 "maxLength": 13,
2727 "type": "string"
2828 },
2929 "openLibraryEdition": {
3030 "description": "Open Library's edition key, such as /books/OL62590811M.",
3131 "maxLength": 32,
3232 "type": "string"
3333 },
3434 "openLibraryWork": {
3535 "description": "Open Library's work key, such as /works/OL45908582W: the book across its editions.",
3636 "maxLength": 32,
3737 "type": "string"
3838 }
3939 },
4040 "type": "object"
4141 },
4242 "bookRef": {
4343 "description": "Which book a record is about, in every key anyone uses, so an app finds it with the one it has: by BookHive ID, ISBN, Open Library work, or the reader's own record in another app. Resenha's records carry it beside their own keys. Nothing is required but the title, so a book no catalogue knows can still be named.",
4444 "properties": {
4545 "authors": {
4646 "description": "Tab-separated, as BookHive stores them.",
4747 "maxLength": 1024,
4848 "type": "string"
4949 },
50 "cover": {
51 "description": "A cover the writer's app showed for the book, downloaded and found to be a real cover rather than a catalogue's stand-in picture. Resenha's server keeps it as a fallback for the book's cover, after the catalogue's and Open Library's.",
52 "format": "uri",
53 "maxLength": 1000,
54 "type": "string"
55 },
5056 "identifiers": {
5157 "ref": "#bookIdentifiers",
5258 "type": "ref"
5359 },
5460 "records": {
5561 "description": "The reader's own records for the book in any app: their buzz.bookhive.book, their social.popfeed.feed.listItem records, a record in an app to come.",
5662 "items": {
5763 "format": "at-uri",
5864 "type": "string"
5965 },
6066 "maxLength": 20,
6167 "type": "array"
6268 },
6369 "title": {
6470 "maxLength": 512,
6571 "type": "string"
6672 }
6773 },
6874 "required": [
6975 "title"
7076 ],
7177 "type": "object"
7278 },
7379 "bookView": {
7480 "description": "Enough of a book to show a row. Cover and details come from BookHive's catalogue when the server has them; otherwise the app asks BookHive itself.",
7581 "properties": {
7682 "authors": {
7783 "description": "Authors as BookHive stores them, tab-separated.",
7884 "maxLength": 1024,
7985 "type": "string"
8086 },
8187 "cover": {
8288 "description": "For a Popfeed book, Popfeed's own cover, its surest address.",
8389 "format": "uri",
8490 "type": "string"
8591 },
8692 "covers": {
8793 "description": "For a Popfeed book, every address of its cover, surest first, when there is more than one: the poster blob's address on Bluesky's CDN, isbndb's, then the item's posterUrl. A reader tries the next when one fails.",
8894 "items": {
8995 "format": "uri",
9096 "type": "string"
9197 },
9298 "maxLength": 8,
9399 "type": "array"
94100 },
95101 "genres": {
96102 "items": {
97103 "maxLength": 64,
98104 "type": "string"
99105 },
100106 "maxLength": 32,
101107 "type": "array"
102108 },
103109 "hiveId": {
104110 "description": "The book's BookHive ID, or, for a Popfeed book BookHive's catalogue doesn't know, a stand-in beginning with popfeed- that no BookHive call takes.",
105111 "maxLength": 64,
106112 "type": "string"
107113 },
108114 "isbn13": {
109115 "description": "The edition the reader's record names, when it names one. For a book BookHive's catalogue doesn't know, the key of the page its readers share (ink.resenha.book.getBook).",
110116 "maxLength": 13,
111117 "type": "string"
112118 },
113119 "pages": {
114120 "minimum": 1,
115121 "type": "integer"
116122 },
117123 "title": {
118124 "maxLength": 512,
119125 "type": "string"
120126 },
121127 "year": {
122128 "description": "Year of publication, from BookHive's catalogue.",
123129 "type": "integer"
124130 }
125131 },
126132 "required": [
127133 "hiveId"
128134 ],
129135 "type": "object"
130136 },
131137 "commentView": {
132138 "description": "A comment in the thread about a reader reading a book.",
133139 "properties": {
134140 "author": {
135141 "format": "did",
136142 "type": "string"
137143 },
138144 "cid": {
139145 "format": "cid",
140146 "type": "string"
141147 },
142148 "createdAt": {
143149 "format": "datetime",
144150 "type": "string"
145151 },
146152 "parent": {
147153 "description": "The comment this one answers; absent at the top.",
148154 "format": "at-uri",
149155 "type": "string"
150156 },
151157 "removed": {
152158 "description": "Removed by Resenha's maintainer but kept in place because replies hang from it: no words, no author.",
153159 "type": "boolean"
154160 },
155161 "root": {
156162 "format": "at-uri",
157163 "type": "string"
158164 },
159165 "source": {
160166 "description": "A Resenha comment, or a BookHive buzz, which is read here but answered on BookHive.",
161167 "knownValues": [
162168 "resenha",
163169 "bookhive"
164170 ],
165171 "type": "string"
166172 },
167173 "text": {
168174 "maxGraphemes": 1000,
169175 "maxLength": 10000,
170176 "type": "string"
171177 },
172178 "uri": {
173179 "format": "at-uri",
174180 "type": "string"
175181 }
176182 },
177183 "required": [
178184 "uri",
179185 "author",
180186 "text",
181187 "createdAt",
182188 "source"
183189 ],
184190 "type": "object"
185191 },
186192 "event": {
187193 "description": "Something a reader did with a book.",
188194 "properties": {
189195 "actor": {
190196 "format": "did",
191197 "type": "string"
192198 },
193199 "book": {
194200 "ref": "#bookView",
195201 "type": "ref"
196202 },
197203 "cid": {
198204 "description": "The record's version as the server last saw it, for a like or comment to name.",
199205 "format": "cid",
200206 "type": "string"
201207 },
202208 "commentCount": {
203209 "description": "Comments in the event's home: the thread about the reader reading this book (Resenha comments and BookHive buzzes) for a reading or a review kept on BookHive, Popfeed's comments and replies on a Popfeed review, replies to the post of a review published from Resenha.",
204210 "minimum": 0,
205211 "type": "integer"
206212 },
207213 "date": {
208214 "format": "datetime",
209215 "type": "string"
210216 },
211217 "excerpt": {
212218 "description": "The start of the review, plain text.",
213219 "maxGraphemes": 300,
214220 "maxLength": 3000,
215221 "type": "string"
216222 },
217223 "kind": {
218224 "description": "What they did. wantsToRead and abandoned are dated by when the server saw the status change, else by when the book was added; progress by the record.",
219225 "knownValues": [
220226 "started",
221227 "finished",
222228 "reviewed",
223229 "wantsToRead",
224230 "abandoned",
225231 "progress"
226232 ],
227233 "type": "string"
228234 },
229235 "likeCount": {
230236 "description": "Likes in the event's home: Resenha likes on the reader's book record for a reading or a review kept on BookHive, Popfeed likes on a Popfeed review, Bluesky likes on the post that announced a review published from Resenha.",
231237 "minimum": 0,
232238 "type": "integer"
233239 },
234240 "popfeedReview": {
235241 "description": "For a reviewed event from Popfeed: the social.popfeed.feed.review record, whose comments and likes are Popfeed's.",
236242 "format": "at-uri",
237243 "type": "string"
238244 },
239245 "post": {
240246 "description": "For a reviewed event with source resenha: the Bluesky post that announced the review, whose likes and replies are the review's.",
241247 "ref": "com.atproto.repo.strongRef",
242248 "type": "ref"
243249 },
244250 "progress": {
245251 "ref": "#progressView",
246252 "type": "ref"
247253 },
248254 "review": {
249255 "description": "The whole review, plain markdown, on reviewed events and on finished ones that carry the review.",
250256 "maxGraphemes": 100000,
251257 "maxLength": 1000000,
252258 "type": "string"
253259 },
254260 "source": {
255261 "knownValues": [
256262 "bookhive",
257263 "popfeed",
258264 "resenha"
259265 ],
260266 "type": "string"
261267 },
262268 "stars": {
263269 "description": "In half stars, 1 to 10, as BookHive keeps them.",
264270 "maximum": 10,
265271 "minimum": 1,
266272 "type": "integer"
267273 },
268274 "uri": {
269275 "description": "The record it comes from: the reader's BookHive book record, or their Popfeed list item (or review, for a book reviewed but on no list).",
270276 "format": "at-uri",
271277 "type": "string"
272278 },
273279 "viewer": {
274280 "ref": "#viewerState",
275281 "type": "ref"
276282 }
277283 },
278284 "required": [
279285 "uri",
280286 "kind",
281287 "actor",
282288 "book",
283289 "date",
284290 "source"
285291 ],
286292 "type": "object"
287293 },
288294 "followerView": {
289295 "description": "Someone who follows the caller.",
290296 "properties": {
291297 "books": {
292298 "description": "How many books they keep in the index; 0 for someone who isn't a reader.",
293299 "minimum": 0,
294300 "type": "integer"
295301 },
296302 "did": {
297303 "format": "did",
298304 "type": "string"
299305 },
300306 "followedAt": {
301307 "description": "When they followed, when the server heard the follow itself; absent for follows older than its listening.",
302308 "format": "datetime",
303309 "type": "string"
304310 },
305311 "follows": {
306312 "description": "Whether the caller follows them back.",
307313 "type": "boolean"
308314 },
309315 "readingNow": {
310316 "items": {
311317 "ref": "#bookView",
312318 "type": "ref"
313319 },
314320 "maxLength": 3,
315321 "type": "array"
316322 }
317323 },
318324 "required": [
319325 "did"
320326 ],
321327 "type": "object"
322328 },
323329 "knownFollowers": {
324330 "description": "Among the caller's follows, who follows a reader: social proof within Resenha's community, from the follows and followers the server keeps.",
325331 "properties": {
326332 "count": {
327333 "minimum": 0,
328334 "type": "integer"
329335 },
330336 "followers": {
331337 "description": "Up to three of them, to name.",
332338 "items": {
333339 "format": "did",
334340 "type": "string"
335341 },
336342 "maxLength": 3,
337343 "type": "array"
338344 }
339345 },
340346 "required": [
341347 "count"
342348 ],
343349 "type": "object"
344350 },
345351 "profileView": {
346352 "description": "Someone's name and picture, as Bluesky's AppView last gave them to the server; absent for a reader it hasn't fetched yet, whose name the app then finds itself.",
347353 "properties": {
348354 "avatar": {
349355 "format": "uri",
350356 "type": "string"
351357 },
352358 "did": {
353359 "format": "did",
354360 "type": "string"
355361 },
356362 "displayName": {
357363 "maxGraphemes": 64,
358364 "maxLength": 640,
359365 "type": "string"
360366 },
361367 "handle": {
362368 "format": "handle",
363369 "type": "string"
364370 }
365371 },
366372 "required": [
367373 "did"
368374 ],
369375 "type": "object"
370376 },
371377 "progressView": {
372378 "description": "How far through the book the reader is, as the record says.",
373379 "properties": {
374380 "currentPage": {
375381 "minimum": 1,
376382 "type": "integer"
377383 },
378384 "percent": {
379385 "maximum": 100,
380386 "minimum": 0,
381387 "type": "integer"
382388 },
383389 "totalPages": {
384390 "minimum": 1,
385391 "type": "integer"
386392 },
387393 "updatedAt": {
388394 "format": "datetime",
389395 "type": "string"
390396 }
391397 },
392398 "required": [
393399 "percent",
394400 "updatedAt"
395401 ],
396402 "type": "object"
397403 },
398404 "readerView": {
399405 "properties": {
400406 "books": {
401407 "description": "How many books they keep on BookHive.",
402408 "minimum": 0,
403409 "type": "integer"
404410 },
405411 "booksInCommon": {
406412 "description": "With the caller, when sorted by similar.",
407413 "minimum": 0,
408414 "type": "integer"
409415 },
410416 "did": {
411417 "format": "did",
412418 "type": "string"
413419 },
414420 "followedAt": {
415421 "description": "When the caller followed them, for the caller's own list.",
416422 "format": "datetime",
417423 "type": "string"
418424 },
419425 "followsYou": {
420426 "description": "Whether they follow the caller, as the server knows it.",
421427 "type": "boolean"
422428 },
423429 "joinedAt": {
424430 "description": "When they started using Resenha.",
425431 "format": "datetime",
426432 "type": "string"
427433 },
428434 "lastActivity": {
429435 "description": "When they last started, finished, changed or progressed in a book.",
430436 "format": "datetime",
431437 "type": "string"
432438 },
433439 "readingNow": {
434440 "items": {
435441 "ref": "#bookView",
436442 "type": "ref"
437443 },
438444 "maxLength": 3,
439445 "type": "array"
440446 }
441447 },
442448 "required": [
443449 "did"
444450 ],
445451 "type": "object"
446452 },
447453 "reportView": {
448454 "description": "A reported, or removed, Resenha comment as the maintainers see it.",
449455 "properties": {
450456 "author": {
451457 "format": "did",
452458 "type": "string"
453459 },
454460 "note": {
455461 "type": "string"
456462 },
457463 "reason": {
458464 "type": "string"
459465 },
460466 "removed": {
461467 "type": "boolean"
462468 },
463469 "removedAt": {
464470 "format": "datetime",
465471 "type": "string"
466472 },
467473 "reportedAt": {
468474 "format": "datetime",
469475 "type": "string"
470476 },
471477 "reporter": {
472478 "format": "did",
473479 "type": "string"
474480 },
475481 "resolution": {
476482 "knownValues": [
477483 "remove",
478484 "keep",
479485 "removeAndHide",
480486 "restore"
481487 ],
482488 "type": "string"
483489 },
484490 "resolvedAt": {
485491 "format": "datetime",
486492 "type": "string"
487493 },
488494 "subject": {
489495 "description": "The book record the thread is on.",
490496 "format": "at-uri",
491497 "type": "string"
492498 },
493499 "subjectOwner": {
494500 "format": "did",
495501 "type": "string"
496502 },
497503 "subjectTitle": {
498504 "description": "That book's title, when the index has it.",
499505 "type": "string"
500506 },
501507 "text": {
502508 "description": "The comment's words, as the index keeps them.",
503509 "type": "string"
504510 },
505511 "uri": {
506512 "description": "The comment.",
507513 "format": "at-uri",
508514 "type": "string"
509515 }
510516 },
511517 "required": [
512518 "uri"
513519 ],
514520 "type": "object"
515521 },
516522 "reviewView": {
517523 "properties": {
518524 "author": {
519525 "format": "did",
520526 "type": "string"
521527 },
522528 "book": {
523529 "ref": "#bookView",
524530 "type": "ref"
525531 },
526532 "createdAt": {
527533 "format": "datetime",
528534 "type": "string"
529535 },
530536 "excerpt": {
531537 "maxGraphemes": 300,
532538 "maxLength": 3000,
533539 "type": "string"
534540 },
535541 "hasSpoilers": {
536542 "type": "boolean"
537543 },
538544 "languages": {
539545 "items": {
540546 "format": "language",
541547 "type": "string"
542548 },
543549 "maxLength": 8,
544550 "type": "array"
545551 },
546552 "source": {
547553 "knownValues": [
548554 "bookhive",
549555 "popfeed",
550556 "resenha"
551557 ],
552558 "type": "string"
553559 },
554560 "stars": {
555561 "maximum": 10,
556562 "minimum": 1,
557563 "type": "integer"
558564 },
559565 "text": {
560566 "description": "The whole review, when asked for with full.",
561567 "maxGraphemes": 100000,
562568 "maxLength": 1000000,
563569 "type": "string"
564570 },
565571 "title": {
566572 "maxGraphemes": 300,
567573 "maxLength": 3000,
568574 "type": "string"
569575 },
570576 "uri": {
571577 "description": "The review: a Standard.site document, a Popfeed review, or a BookHive book record with a review.",
572578 "format": "at-uri",
573579 "type": "string"
574580 }
575581 },
576582 "required": [
577583 "uri",
578584 "author",
579585 "book",
580586 "createdAt",
581587 "source"
582588 ],
583589 "type": "object"
584590 },
585591 "starterPackView": {
586592 "description": "A starter pack the server keeps in the official account.",
587593 "properties": {
588594 "description": {
589595 "type": "string"
590596 },
591597 "list": {
592598 "description": "The reference list the pack is built on.",
593599 "format": "at-uri",
594600 "type": "string"
595601 },
596602 "members": {
597603 "items": {
598604 "format": "did",
599605 "type": "string"
600606 },
601607 "maxLength": 150,
602608 "type": "array"
603609 },
604610 "name": {
605611 "type": "string"
606612 },
607613 "updatedAt": {
608614 "format": "datetime",
609615 "type": "string"
610616 },
611617 "uri": {
612618 "format": "at-uri",
613619 "type": "string"
614620 }
615621 },
616622 "required": [
617623 "uri",
618624 "name",
619625 "members"
620626 ],
621627 "type": "object"
622628 },
623629 "suggestionView": {
624630 "description": "A reader worth following, for an empty Parlor.",
625631 "properties": {
626632 "activeDays": {
627633 "description": "Days over the last six months on which they started, finished, changed, progressed in or reviewed a book, on any source.",
628634 "minimum": 0,
629635 "type": "integer"
630636 },
631637 "books": {
632638 "minimum": 0,
633639 "type": "integer"
634640 },
635641 "did": {
636642 "format": "did",
637643 "type": "string"
638644 },
639645 "followsYou": {
640646 "description": "They follow the caller already.",
641647 "type": "boolean"
642648 },
643649 "knownFollowers": {
644650 "ref": "#knownFollowers",
645651 "type": "ref"
646652 },
647653 "languages": {
648654 "description": "The languages they said their reviews are in.",
649655 "items": {
650656 "format": "language",
651657 "type": "string"
652658 },
653659 "type": "array"
654660 },
655661 "latestReview": {
656662 "properties": {
657663 "date": {
658664 "format": "datetime",
659665 "type": "string"
660666 },
661667 "excerpt": {
662668 "maxGraphemes": 200,
663669 "type": "string"
664670 },
665671 "title": {
666672 "type": "string"
667673 }
668674 },
669675 "type": "object"
670676 },
671677 "reviews": {
672678 "minimum": 0,
673679 "type": "integer"
674680 },
675681 "source": {
676682 "description": "Where they read: Resenha's readers come first, then BookHive's and Popfeed's.",
677683 "knownValues": [
678684 "resenha",
679685 "bookhive",
680686 "popfeed"
681687 ],
682688 "type": "string"
683689 },
684690 "tier": {
685691 "maximum": 2,
686692 "minimum": 0,
687693 "type": "integer"
688694 }
689695 },
690696 "required": [
691697 "did",
692698 "source"
693699 ],
694700 "type": "object"
695701 },
696702 "viewerState": {
697703 "description": "The caller's own reactions to a book record.",
698704 "properties": {
699705 "like": {
700706 "description": "The caller's like, to take it back.",
701707 "format": "at-uri",
702708 "type": "string"
703709 }
704710 },
705711 "type": "object"
706712 }
707713 },
708714 "description": "Views shared by the calls Resenha's server answers.",
709715 "id": "ink.resenha.defs",
710716 "lexicon": 1
711717}

Compare other versions