org.passingreads.book.event
Schema Diff
+102 -5
Compatibility Analysis
Breaking Changes Detected
6 breaking changes, 54 non-breaking changes.
Breaking Changes (6)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "org.passingreads.book.event#checkin", src: "org.passingreads.book.event#checkin", tgt: "org.passingreads.book.event#checkin.location", kind: "prop", name: Some("location") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "org.passingreads.book.event#giftAcceptance", src: "org.passingreads.book.event#giftAcceptance", tgt: "org.passingreads.book.event#giftAcceptance.gift", kind: "prop", name: Some("gift") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "org.passingreads.book.event#find", src: "org.passingreads.book.event#find", tgt: "org.passingreads.book.event#find.location", kind: "prop", name: Some("location") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "org.passingreads.book.event#drop", src: "org.passingreads.book.event#drop", tgt: "org.passingreads.book.event#drop.location", kind: "prop", name: Some("location") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "org.passingreads.book.event#gift", src: "org.passingreads.book.event#gift", tgt: "org.passingreads.book.event#gift.recipient", kind: "prop", name: Some("recipient") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "org.passingreads.book.event:body", src: "org.passingreads.book.event:body", tgt: "org.passingreads.book.event:body.location", kind: "prop", name: Some("location") }
Non-Breaking Changes (54)
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#checkin" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#checkin.location" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#checkin.location:variant0" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#checkin.location:variant1" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#drop" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#drop.location" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#drop.location:variant0" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#drop.location:variant1" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#find" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#find.location" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#find.location:variant0" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#find.location:variant1" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#gift" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#gift.location" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#gift.location:variant0" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#gift.location:variant1" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#gift.recipient" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#giftAcceptance" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event#giftAcceptance.gift" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event:body.details" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event:body.details:variant0" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event:body.details:variant1" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event:body.details:variant2" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event:body.details:variant3" }
- AddedVertex AddedVertex { vertex_id: "org.passingreads.book.event:body.details:variant4" }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#checkin.location", tgt: "org.passingreads.book.event#checkin.location:variant0", kind: "variant", name: Some("community.lexicon.location.hthree#main") }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#checkin.location", tgt: "org.passingreads.book.event#checkin.location:variant1", kind: "variant", name: Some("#osmLocation") }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#checkin.location:variant0", tgt: "community.lexicon.location.hthree#main", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#checkin.location:variant1", tgt: "org.passingreads.book.event#osmLocation", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#drop.location", tgt: "org.passingreads.book.event#drop.location:variant0", kind: "variant", name: Some("community.lexicon.location.hthree#main") }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#drop.location", tgt: "org.passingreads.book.event#drop.location:variant1", kind: "variant", name: Some("#osmLocation") }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#drop.location:variant0", tgt: "community.lexicon.location.hthree#main", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#drop.location:variant1", tgt: "org.passingreads.book.event#osmLocation", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#find.location", tgt: "org.passingreads.book.event#find.location:variant0", kind: "variant", name: Some("community.lexicon.location.hthree#main") }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#find.location", tgt: "org.passingreads.book.event#find.location:variant1", kind: "variant", name: Some("#osmLocation") }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#find.location:variant0", tgt: "community.lexicon.location.hthree#main", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#find.location:variant1", tgt: "org.passingreads.book.event#osmLocation", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#gift", tgt: "org.passingreads.book.event#gift.location", kind: "prop", name: Some("location") }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#gift.location", tgt: "org.passingreads.book.event#gift.location:variant0", kind: "variant", name: Some("community.lexicon.location.hthree#main") }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#gift.location", tgt: "org.passingreads.book.event#gift.location:variant1", kind: "variant", name: Some("#osmLocation") }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#gift.location:variant0", tgt: "community.lexicon.location.hthree#main", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#gift.location:variant1", tgt: "org.passingreads.book.event#osmLocation", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.passingreads.book.event#giftAcceptance.gift", tgt: "com.atproto.repo.strongRef#main", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.passingreads.book.event:body", tgt: "org.passingreads.book.event:body.details", kind: "prop", name: Some("details") }
- AddedEdge AddedEdge { src: "org.passingreads.book.event:body.details", tgt: "org.passingreads.book.event:body.details:variant0", kind: "variant", name: Some("#drop") }
- AddedEdge AddedEdge { src: "org.passingreads.book.event:body.details", tgt: "org.passingreads.book.event:body.details:variant1", kind: "variant", name: Some("#find") }
- AddedEdge AddedEdge { src: "org.passingreads.book.event:body.details", tgt: "org.passingreads.book.event:body.details:variant2", kind: "variant", name: Some("#checkin") }
- AddedEdge AddedEdge { src: "org.passingreads.book.event:body.details", tgt: "org.passingreads.book.event:body.details:variant3", kind: "variant", name: Some("#gift") }
- AddedEdge AddedEdge { src: "org.passingreads.book.event:body.details", tgt: "org.passingreads.book.event:body.details:variant4", kind: "variant", name: Some("#giftAcceptance") }
- AddedEdge AddedEdge { src: "org.passingreads.book.event:body.details:variant0", tgt: "org.passingreads.book.event#drop", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.passingreads.book.event:body.details:variant1", tgt: "org.passingreads.book.event#find", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.passingreads.book.event:body.details:variant2", tgt: "org.passingreads.book.event#checkin", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.passingreads.book.event:body.details:variant3", tgt: "org.passingreads.book.event#gift", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.passingreads.book.event:body.details:variant4", tgt: "org.passingreads.book.event#giftAcceptance", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "org.passingreads.book.event#checkin" }AddedVertex { vertex_id: "org.passingreads.book.event#checkin.location" }AddedVertex { vertex_id: "org.passingreads.book.event#checkin.location:variant0" }AddedVertex { vertex_id: "org.passingreads.book.event#checkin.location:variant1" }AddedVertex { vertex_id: "org.passingreads.book.event#drop" }AddedVertex { vertex_id: "org.passingreads.book.event#drop.location" }AddedVertex { vertex_id: "org.passingreads.book.event#drop.location:variant0" }AddedVertex { vertex_id: "org.passingreads.book.event#drop.location:variant1" }AddedVertex { vertex_id: "org.passingreads.book.event#find" }AddedVertex { vertex_id: "org.passingreads.book.event#find.location" }AddedVertex { vertex_id: "org.passingreads.book.event#find.location:variant0" }AddedVertex { vertex_id: "org.passingreads.book.event#find.location:variant1" }AddedVertex { vertex_id: "org.passingreads.book.event#gift" }AddedVertex { vertex_id: "org.passingreads.book.event#gift.location" }AddedVertex { vertex_id: "org.passingreads.book.event#gift.location:variant0" }AddedVertex { vertex_id: "org.passingreads.book.event#gift.location:variant1" }AddedVertex { vertex_id: "org.passingreads.book.event#gift.recipient" }AddedVertex { vertex_id: "org.passingreads.book.event#giftAcceptance" }AddedVertex { vertex_id: "org.passingreads.book.event#giftAcceptance.gift" }AddedVertex { vertex_id: "org.passingreads.book.event:body.details" }AddedVertex { vertex_id: "org.passingreads.book.event:body.details:variant0" }AddedVertex { vertex_id: "org.passingreads.book.event:body.details:variant1" }AddedVertex { vertex_id: "org.passingreads.book.event:body.details:variant2" }AddedVertex { vertex_id: "org.passingreads.book.event:body.details:variant3" }AddedVertex { vertex_id: "org.passingreads.book.event:body.details:variant4" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "org.passingreads.book.event#giftAcceptance", src: "org.passingreads.book.event#giftAcceptance", tgt: "org.passingreads.book.event#giftAcceptance.gift", kind: "prop", name: Some("gift") }
- Breaking: RequiredEdgeAdded { vertex_id: "org.passingreads.book.event#drop", src: "org.passingreads.book.event#drop", tgt: "org.passingreads.book.event#drop.location", kind: "prop", name: Some("location") }
- Breaking: RequiredEdgeAdded { vertex_id: "org.passingreads.book.event#find", src: "org.passingreads.book.event#find", tgt: "org.passingreads.book.event#find.location", kind: "prop", name: Some("location") }
- Breaking: RequiredEdgeAdded { vertex_id: "org.passingreads.book.event#gift", src: "org.passingreads.book.event#gift", tgt: "org.passingreads.book.event#gift.recipient", kind: "prop", name: Some("recipient") }
- Breaking: RequiredEdgeAdded { vertex_id: "org.passingreads.book.event#checkin", src: "org.passingreads.book.event#checkin", tgt: "org.passingreads.book.event#checkin.location", kind: "prop", name: Some("location") }
- Breaking: RequiredEdgeRemoved { vertex_id: "org.passingreads.book.event:body", src: "org.passingreads.book.event:body", tgt: "org.passingreads.book.event:body.location", kind: "prop", name: Some("location") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#checkin.location", tgt: "org.passingreads.book.event#checkin.location:variant0", kind: "variant", name: Some("community.lexicon.location.hthree#main") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#checkin.location", tgt: "org.passingreads.book.event#checkin.location:variant1", kind: "variant", name: Some("#osmLocation") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#checkin.location:variant0", tgt: "community.lexicon.location.hthree#main", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#checkin.location:variant1", tgt: "org.passingreads.book.event#osmLocation", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#drop.location", tgt: "org.passingreads.book.event#drop.location:variant0", kind: "variant", name: Some("community.lexicon.location.hthree#main") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#drop.location", tgt: "org.passingreads.book.event#drop.location:variant1", kind: "variant", name: Some("#osmLocation") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#drop.location:variant0", tgt: "community.lexicon.location.hthree#main", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#drop.location:variant1", tgt: "org.passingreads.book.event#osmLocation", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#find.location", tgt: "org.passingreads.book.event#find.location:variant0", kind: "variant", name: Some("community.lexicon.location.hthree#main") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#find.location", tgt: "org.passingreads.book.event#find.location:variant1", kind: "variant", name: Some("#osmLocation") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#find.location:variant0", tgt: "community.lexicon.location.hthree#main", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#find.location:variant1", tgt: "org.passingreads.book.event#osmLocation", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#gift", tgt: "org.passingreads.book.event#gift.location", kind: "prop", name: Some("location") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#gift.location", tgt: "org.passingreads.book.event#gift.location:variant0", kind: "variant", name: Some("community.lexicon.location.hthree#main") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#gift.location", tgt: "org.passingreads.book.event#gift.location:variant1", kind: "variant", name: Some("#osmLocation") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#gift.location:variant0", tgt: "community.lexicon.location.hthree#main", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#gift.location:variant1", tgt: "org.passingreads.book.event#osmLocation", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event#giftAcceptance.gift", tgt: "com.atproto.repo.strongRef#main", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event:body", tgt: "org.passingreads.book.event:body.details", kind: "prop", name: Some("details") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event:body.details", tgt: "org.passingreads.book.event:body.details:variant0", kind: "variant", name: Some("#drop") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event:body.details", tgt: "org.passingreads.book.event:body.details:variant1", kind: "variant", name: Some("#find") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event:body.details", tgt: "org.passingreads.book.event:body.details:variant2", kind: "variant", name: Some("#checkin") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event:body.details", tgt: "org.passingreads.book.event:body.details:variant3", kind: "variant", name: Some("#gift") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event:body.details", tgt: "org.passingreads.book.event:body.details:variant4", kind: "variant", name: Some("#giftAcceptance") }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event:body.details:variant0", tgt: "org.passingreads.book.event#drop", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event:body.details:variant1", tgt: "org.passingreads.book.event#find", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event:body.details:variant2", tgt: "org.passingreads.book.event#checkin", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event:body.details:variant3", tgt: "org.passingreads.book.event#gift", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.passingreads.book.event:body.details:variant4", tgt: "org.passingreads.book.event#giftAcceptance", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
+
"checkin": {
5
+
"description": "The book has moved, but has not changed hands.",
6
+
"properties": {
7
+
"location": {
8
+
"description": "Where the book is now (an h3 cell or an OSM place)",
9
+
"refs": [
10
+
"community.lexicon.location.hthree#main",
11
+
"#osmLocation"
12
+
],
13
+
"type": "union"
14
+
}
15
+
},
16
+
"required": [
17
+
"location"
18
+
],
19
+
"type": "object"
20
+
},
21
+
"drop": {
22
+
"description": "The book was left at a location for someone else to take.",
23
+
"properties": {
24
+
"location": {
25
+
"description": "Where the book was left (an h3 cell or an OSM place)",
26
+
"refs": [
27
+
"community.lexicon.location.hthree#main",
28
+
"#osmLocation"
29
+
],
30
+
"type": "union"
31
+
}
32
+
},
33
+
"required": [
34
+
"location"
35
+
],
36
+
"type": "object"
37
+
},
38
+
"find": {
39
+
"description": "The book was picked up, and is now held by the actor.",
40
+
"properties": {
41
+
"location": {
42
+
"description": "Where the book was picked up (an h3 cell or an OSM place)",
43
+
"refs": [
44
+
"community.lexicon.location.hthree#main",
45
+
"#osmLocation"
46
+
],
47
+
"type": "union"
48
+
}
49
+
},
50
+
"required": [
51
+
"location"
52
+
],
53
+
"type": "object"
54
+
},
55
+
"gift": {
56
+
"description": "The book was handed to a named person. It is theirs once they publish a #giftAcceptance.",
57
+
"properties": {
58
+
"location": {
59
+
"description": "Where the handover happened, if the giver chose to record it.",
60
+
"refs": [
61
+
"community.lexicon.location.hthree#main",
62
+
"#osmLocation"
63
+
],
64
+
"type": "union"
65
+
},
66
+
"recipient": {
67
+
"description": "The person the book was handed to, and the only one who may accept it.",
68
+
"format": "did",
69
+
"type": "string"
70
+
}
71
+
},
72
+
"required": [
73
+
"recipient"
74
+
],
75
+
"type": "object"
76
+
},
77
+
"giftAcceptance": {
78
+
"description": "The named recipient of a #gift has taken the book. Carries no signatures: the recipient need not hold the book's keypair, and the signed gift naming their repository is the authority instead.",
79
+
"properties": {
80
+
"gift": {
81
+
"description": "The org.passingreads.book.event whose #gift is being accepted.",
82
+
"ref": "com.atproto.repo.strongRef#main",
83
+
"type": "ref"
84
+
}
85
+
},
86
+
"required": [
87
+
"gift"
88
+
],
89
+
"type": "object"
90
+
},
4
91
"main": {
5
92
"description": "The status of a book has changed.",
6
93
"key": "tid",
7
94
"record": {
8
95
"properties": {
9
96
"book": {
10
97
"description": "The book that was dropped (a org.passingreads.book.registration)",
11
98
"ref": "com.atproto.repo.strongRef#main",
12
99
"type": "ref"
13
100
},
101
+
"details": {
102
+
"description": "What happened to the book. Each member carries the fields that event type requires — notably whether a `location` is mandatory. Absent only on records written before this union existed, which carry `event` and a top-level `location` instead.",
103
+
"refs": [
104
+
"#drop",
105
+
"#find",
106
+
"#checkin",
107
+
"#gift",
108
+
"#giftAcceptance"
109
+
],
110
+
"type": "union"
111
+
},
14
112
"event": {
15
-
"description": "What event has occurred",
113
+
"description": "DEPRECATED: superseded by `details`, and ignored whenever `details` is present. Retained so this lexicon still describes records written before the union existed.",
16
114
"knownValues": [
17
115
"org.passingreads.book.checkin",
18
116
"org.passingreads.book.drop",
19
117
"org.passingreads.book.find"
20
118
],
21
119
"type": "string"
22
120
},
23
121
"location": {
24
-
"description": "Where this event occurred (an h3 cell or an OSM place)",
122
+
"description": "DEPRECATED: superseded by the `location` inside `details`, and ignored whenever `details` is present. Retained so this lexicon still describes records written before the union existed.",
25
123
"refs": [
26
124
"community.lexicon.location.hthree#main",
27
125
"#osmLocation"
28
126
],
29
127
"type": "union"
30
128
},
31
129
"occurredAt": {
32
130
"description": "Client-declared timestamp of when the book was dropped",
33
131
"format": "datetime",
34
132
"type": "string"
35
133
},
36
134
"signatures": {
37
-
"description": "Inline attestations binding this event to the book's keypair.",
135
+
"description": "Inline attestations binding this event to the book's keypair. Empty only on a #giftAcceptance, whose authority is the referenced gift naming the accepting repository.",
38
136
"items": {
39
137
"ref": "org.passingreads.signature.book#main",
40
138
"type": "ref"
41
139
},
42
-
"minLength": 1,
140
+
"minLength": 0,
43
141
"type": "array"
44
142
}
45
143
},
46
144
"required": [
47
145
"book",
48
-
"location",
49
146
"signatures",
50
147
"occurredAt"
51
148
],
52
149
"type": "object"
53
150
},
54
151
"type": "record"
55
152
},
56
153
"osmLocation": {
57
154
"description": "A physical location from OpenStreetMap.",
58
155
"properties": {
59
156
"category": {
60
157
"description": "The type of place (e.g., cafe, library, park).",
61
158
"type": "string"
62
159
},
63
160
"name": {
64
161
"description": "The name of the place from OpenStreetMap.",
65
162
"type": "string"
66
163
},
67
164
"osmId": {
68
165
"description": "The OpenStreetMap element ID in interoperable format: N (node), W (way), or R (relation) prefix followed by numeric ID. Example: N123456789",
69
166
"type": "string"
70
167
},
71
168
"value": {
72
169
"description": "The H3 cell index for proximity queries.",
73
170
"type": "string"
74
171
}
75
172
},
76
173
"required": [
77
174
"osmId",
78
175
"name",
79
176
"value"
80
177
],
81
178
"type": "object"
82
179
}
83
180
},
84
181
"id": "org.passingreads.book.event",
85
182
"lexicon": 1
86
183
}