org.passingreads.book.event

passingreads.org

Schema Diff

+11 -17

From

CID
bafyreib6fo3flvd...
Indexed At
2026-02-18 19:51 UTC
View this version

To

CID
bafyreih5hs2nxl6...
Indexed At
2026-04-29 04:17 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

6 breaking changes, 4 non-breaking changes.

Breaking Changes (6)
  • RemovedVertex RemovedVertex { vertex_id: "org.passingreads.book.event:body.bookPub" }
  • RemovedVertex RemovedVertex { vertex_id: "org.passingreads.book.event:body.bookSig" }
  • RemovedVertex RemovedVertex { vertex_id: "org.passingreads.book.event:body.did" }
  • RemovedEdge RemovedEdge { src: "org.passingreads.book.event:body", tgt: "org.passingreads.book.event:body.bookPub", kind: "prop", name: Some("bookPub") }
  • RemovedEdge RemovedEdge { src: "org.passingreads.book.event:body", tgt: "org.passingreads.book.event:body.bookSig", kind: "prop", name: Some("bookSig") }
  • RemovedEdge RemovedEdge { src: "org.passingreads.book.event:body", tgt: "org.passingreads.book.event:body.did", kind: "prop", name: Some("did") }
Non-Breaking Changes (4)
  • AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event:body.signatures" }
  • AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event:body.signatures:items" }
  • AddedEdge AddedEdge { src: "org.passingreads.book.event:body", tgt: "org.passingreads.book.event:body.signatures", kind: "prop", name: Some("signatures") }
  • AddedEdge AddedEdge { src: "org.passingreads.book.event:body.signatures", tgt: "org.passingreads.book.event:body.signatures:items", kind: "items", name: None }

Migration Guidance

Removed Elements

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

Added Elements

  • AddedVertex { vertex_id: "org.passingreads.book.event:body.signatures" }
  • AddedVertex { vertex_id: "org.passingreads.book.event:body.signatures:items" }

Additional Notes

  • Breaking: RemovedEdge { src: "org.passingreads.book.event:body", tgt: "org.passingreads.book.event:body.bookPub", kind: "prop", name: Some("bookPub") }
  • Breaking: RemovedEdge { src: "org.passingreads.book.event:body", tgt: "org.passingreads.book.event:body.bookSig", kind: "prop", name: Some("bookSig") }
  • Breaking: RemovedEdge { src: "org.passingreads.book.event:body", tgt: "org.passingreads.book.event:body.did", kind: "prop", name: Some("did") }
  • Non-breaking: AddedEdge { src: "org.passingreads.book.event:body", tgt: "org.passingreads.book.event:body.signatures", kind: "prop", name: Some("signatures") }
  • Non-breaking: AddedEdge { src: "org.passingreads.book.event:body.signatures", tgt: "org.passingreads.book.event:body.signatures:items", kind: "items", name: None }
1 1
{
2 2
  "id": "org.passingreads.book.event",
3 3
  "defs": {
4 4
    "main": {
5 5
      "key": "tid",
6 6
      "type": "record",
7 7
      "record": {
8 8
        "type": "object",
9 9
        "required": [
10 -
          "did",
11 10
          "book",
12 -
          "occurredAt",
13 11
          "location",
14 -
          "bookPub",
15 -
          "bookSig"
12 +
          "signatures",
13 +
          "occurredAt"
16 14
        ],
17 15
        "properties": {
18 -
          "did": {
19 -
            "type": "string",
20 -
            "format": "did",
21 -
            "description": "The DID of the person who registered the book. Included here, so it's verifiable with the bookSig."
22 -
          },
23 16
          "book": {
24 17
            "ref": "com.atproto.repo.strongRef#main",
25 18
            "type": "ref",
26 19
            "description": "The book that was dropped (a org.passingreads.book.registration)"
27 20
          },
28 21
          "event": {
29 22
            "type": "string",
30 23
            "description": "What event has occurred",
31 24
            "knownValues": [
32 25
              "org.passingreads.book.checkin",
33 26
              "org.passingreads.book.drop",
34 27
              "org.passingreads.book.find"
35 28
            ]
36 29
          },
37 -
          "bookPub": {
38 -
            "type": "bytes",
39 -
            "description": "The multicodec public key of the book."
40 -
          },
41 -
          "bookSig": {
42 -
            "type": "bytes",
43 -
            "description": "The signature of this record, without this attribute, as created by the private key associated with the book"
44 -
          },
45 30
          "location": {
46 31
            "refs": [
47 32
              "com.atproto.repo.strongRef#main",
48 33
              "community.lexicon.location.hthree#main",
49 34
              "#osmLocation"
50 35
            ],
51 36
            "type": "union",
52 37
            "description": "Where this event occurred (an h3 cell, an OSM place, or a link to an outpost — org.passingreads.outpost.registration)"
53 38
          },
54 39
          "occurredAt": {
55 40
            "type": "string",
56 41
            "format": "datetime",
57 42
            "description": "Client-declared timestamp of when the book was dropped"
43 +
          },
44 +
          "signatures": {
45 +
            "type": "array",
46 +
            "items": {
47 +
              "ref": "org.passingreads.signature.book#main",
48 +
              "type": "ref"
49 +
            },
50 +
            "minLength": 1,
51 +
            "description": "Inline attestations binding this event to the book's keypair."
58 52
          }
59 53
        }
60 54
      },
61 55
      "description": "The status of a book has changed."
62 56
    },
63 57
    "osmLocation": {
64 58
      "type": "object",
65 59
      "required": [
66 60
        "osmId",
67 61
        "name",
68 62
        "value"
69 63
      ],
70 64
      "properties": {
71 65
        "name": {
72 66
          "type": "string",
73 67
          "description": "The name of the place from OpenStreetMap."
74 68
        },
75 69
        "osmId": {
76 70
          "type": "string",
77 71
          "description": "The OpenStreetMap element ID in interoperable format: N (node), W (way), or R (relation) prefix followed by numeric ID. Example: N123456789"
78 72
        },
79 73
        "value": {
80 74
          "type": "string",
81 75
          "description": "The H3 cell index for proximity queries."
82 76
        },
83 77
        "category": {
84 78
          "type": "string",
85 79
          "description": "The type of place (e.g., cafe, library, park)."
86 80
        }
87 81
      },
88 82
      "description": "A physical location from OpenStreetMap."
89 83
    }
90 84
  },
91 85
  "$type": "com.atproto.lexicon.schema",
92 86
  "lexicon": 1
93 87
}

Compare Other Versions

Lexicon Garden

@