org.passingreads.book.event
Schema Diff
+10 -16
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
11
"location",
13
-
"bookPub",
14
-
"bookSig",
12
+
"signatures",
15
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
}