org.passingreads.book.registration

passingreads.org

Schema Diff

+22 -16

From

CID
bafyreici5bowgpf...
Indexed At
2026-02-18 19:52 UTC
View this version

To

CID
bafyreifpkti4rql...
Indexed At
2026-09-10 14:16 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

7 breaking changes, 17 non-breaking changes.

Breaking Changes (7)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "org.passingreads.book.registration:body", src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.signatures", kind: "prop", name: Some("signatures") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "org.passingreads.book.registration:body", src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.bookPub", kind: "prop", name: Some("bookPub") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "org.passingreads.book.registration:body", src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.did", kind: "prop", name: Some("did") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "org.passingreads.book.registration:body", src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.bookSig", kind: "prop", name: Some("bookSig") }
  • RemovedVertex RemovedVertex { vertex_id: "org.passingreads.book.registration:body.bookPub" }
  • RemovedVertex RemovedVertex { vertex_id: "org.passingreads.book.registration:body.bookSig" }
  • RemovedVertex RemovedVertex { vertex_id: "org.passingreads.book.registration:body.did" }
Non-Breaking Changes (17)
  • AddedVertex AddedVertex { vertex_id: "community.lexicon.location.hthree#main" }
  • AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#osmLocation" }
  • AddedVertex AddedVertex { vertex_id: "org.passingreads.book.registration:body.kept" }
  • AddedVertex AddedVertex { vertex_id: "org.passingreads.book.registration:body.location" }
  • AddedVertex AddedVertex { vertex_id: "org.passingreads.book.registration:body.location:variant0" }
  • AddedVertex AddedVertex { vertex_id: "org.passingreads.book.registration:body.location:variant1" }
  • AddedVertex AddedVertex { vertex_id: "org.passingreads.book.registration:body.signatures" }
  • AddedVertex AddedVertex { vertex_id: "org.passingreads.book.registration:body.signatures:items" }
  • AddedVertex AddedVertex { vertex_id: "org.passingreads.signature.book#main" }
  • AddedEdge AddedEdge { src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.kept", kind: "prop", name: Some("kept") }
  • AddedEdge AddedEdge { src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.location", kind: "prop", name: Some("location") }
  • AddedEdge AddedEdge { src: "org.passingreads.book.registration:body.location", tgt: "org.passingreads.book.registration:body.location:variant0", kind: "variant", name: Some("community.lexicon.location.hthree#main") }
  • AddedEdge AddedEdge { src: "org.passingreads.book.registration:body.location", tgt: "org.passingreads.book.registration:body.location:variant1", kind: "variant", name: Some("org.passingreads.book.event#osmLocation") }
  • AddedEdge AddedEdge { src: "org.passingreads.book.registration:body.location:variant0", tgt: "community.lexicon.location.hthree#main", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "org.passingreads.book.registration:body.location:variant1", tgt: "org.passingreads.book.event#osmLocation", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "org.passingreads.book.registration:body.signatures", tgt: "org.passingreads.book.registration:body.signatures:items", kind: "items", name: None }
  • AddedEdge AddedEdge { src: "org.passingreads.book.registration:body.signatures:items", tgt: "org.passingreads.signature.book#main", kind: "ref", name: None }

Migration Guidance

Removed Elements

  • RemovedVertex { vertex_id: "org.passingreads.book.registration:body.bookPub" }
  • RemovedVertex { vertex_id: "org.passingreads.book.registration:body.bookSig" }
  • RemovedVertex { vertex_id: "org.passingreads.book.registration:body.did" }

Added Elements

  • AddedVertex { vertex_id: "community.lexicon.location.hthree#main" }
  • AddedVertex { vertex_id: "org.passingreads.book.event#osmLocation" }
  • AddedVertex { vertex_id: "org.passingreads.book.registration:body.kept" }
  • AddedVertex { vertex_id: "org.passingreads.book.registration:body.location" }
  • AddedVertex { vertex_id: "org.passingreads.book.registration:body.location:variant0" }
  • AddedVertex { vertex_id: "org.passingreads.book.registration:body.location:variant1" }
  • AddedVertex { vertex_id: "org.passingreads.book.registration:body.signatures" }
  • AddedVertex { vertex_id: "org.passingreads.book.registration:body.signatures:items" }
  • AddedVertex { vertex_id: "org.passingreads.signature.book#main" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "org.passingreads.book.registration:body", src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.signatures", kind: "prop", name: Some("signatures") }
  • Breaking: RequiredEdgeRemoved { vertex_id: "org.passingreads.book.registration:body", src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.bookPub", kind: "prop", name: Some("bookPub") }
  • Breaking: RequiredEdgeRemoved { vertex_id: "org.passingreads.book.registration:body", src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.did", kind: "prop", name: Some("did") }
  • Breaking: RequiredEdgeRemoved { vertex_id: "org.passingreads.book.registration:body", src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.bookSig", kind: "prop", name: Some("bookSig") }
  • Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.kept", kind: "prop", name: Some("kept") }
  • Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body", tgt: "org.passingreads.book.registration:body.location", kind: "prop", name: Some("location") }
  • Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body.location", tgt: "org.passingreads.book.registration:body.location:variant0", kind: "variant", name: Some("community.lexicon.location.hthree#main") }
  • Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body.location", tgt: "org.passingreads.book.registration:body.location:variant1", kind: "variant", name: Some("org.passingreads.book.event#osmLocation") }
  • Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body.location:variant0", tgt: "community.lexicon.location.hthree#main", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body.location:variant1", tgt: "org.passingreads.book.event#osmLocation", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body.signatures", tgt: "org.passingreads.book.registration:body.signatures:items", kind: "items", name: None }
  • Non-breaking: AddedEdge { src: "org.passingreads.book.registration:body.signatures:items", tgt: "org.passingreads.signature.book#main", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "main": {
5 5
      "description": "A book that has been registered on PassingReads",
6 6
      "key": "any",
7 7
      "record": {
8 8
        "properties": {
9 9
          "aspectRatio": {
10 10
            "description": "Aspect ratio of the cover image",
11 11
            "ref": "org.passingreads.defs#aspectRatio",
12 12
            "type": "ref"
13 13
          },
14 14
          "authors": {
15 15
            "description": "Authors of this book, in order of credit. An empty array implies a book of anonymous or unknown authorship.",
16 16
            "items": {
17 17
              "maxLength": 512,
18 18
              "minLength": 1,
19 19
              "type": "string"
20 20
            },
21 21
            "type": "array"
22 22
          },
23 23
          "bookId": {
24 24
            "description": "The book's ID (as defined on its QR Code)",
25 25
            "type": "string"
26 26
          },
27 -
          "bookPub": {
28 -
            "description": "The MultiFormat public key of the book.",
29 -
            "type": "bytes"
30 -
          },
31 -
          "bookSig": {
32 -
            "description": "The MultiFormat signature of this record, without this attribute, as created by the private key associated with the book.",
33 -
            "type": "bytes"
34 -
          },
35 27
          "cover": {
36 28
            "accept": [
37 29
              "image/png",
38 30
              "image/jpeg"
39 31
            ],
40 32
            "description": "Cover image of the book",
41 33
            "maxSize": 1000000,
42 34
            "type": "blob"
43 35
          },
44 -
          "did": {
45 -
            "description": "The DID of the person who registered the book. Included here, so it's verifiable with the bookSig.",
46 -
            "format": "did",
47 -
            "type": "string"
36 +
          "kept": {
37 +
            "description": "Whether the registrant is keeping the book. Absent means true, so records written before this field existed still read as kept. When false the book starts its journey at `location` rather than in the registrant's library.",
38 +
            "type": "boolean"
39 +
          },
40 +
          "location": {
41 +
            "description": "Where the book is at the moment it is registered.",
42 +
            "refs": [
43 +
              "community.lexicon.location.hthree#main",
44 +
              "org.passingreads.book.event#osmLocation"
45 +
            ],
46 +
            "type": "union"
48 47
          },
49 48
          "occurredAt": {
50 49
            "format": "datetime",
51 50
            "type": "string"
52 51
          },
53 52
          "publicationId": {
54 53
            "description": "The book's Open Library Edition ID",
55 54
            "type": "string"
56 55
          },
56 +
          "signatures": {
57 +
            "description": "Inline attestations binding this record to the book's keypair.",
58 +
            "items": {
59 +
              "ref": "org.passingreads.signature.book#main",
60 +
              "type": "ref"
61 +
            },
62 +
            "minLength": 1,
63 +
            "type": "array"
64 +
          },
57 65
          "title": {
58 66
            "description": "The title of the book",
59 67
            "maxLength": 512,
60 68
            "minLength": 1,
61 69
            "type": "string"
62 70
          }
63 71
        },
64 72
        "required": [
65 -
          "did",
66 73
          "bookId",
67 74
          "title",
68 75
          "authors",
69 76
          "publicationId",
70 -
          "occurredAt",
71 -
          "bookPub",
72 -
          "bookSig"
77 +
          "signatures",
78 +
          "occurredAt"
73 79
        ],
74 80
        "type": "object"
75 81
      },
76 82
      "type": "record"
77 83
    }
78 84
  },
79 85
  "id": "org.passingreads.book.registration",
80 86
  "lexicon": 1
81 87
}

Compare Other Versions

Lexicon Garden

@