garden.lexicon.nourishing-earthworm.crepeWatch
Schema Diff
+41 -2
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 13 non-breaking changes.
Breaking Changes (2)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch#place", src: "garden.lexicon.nourishing-earthworm.crepeWatch#place", tgt: "garden.lexicon.nourishing-earthworm.crepeWatch#place.name", kind: "prop", name: Some("name") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch:body", src: "garden.lexicon.nourishing-earthworm.crepeWatch:body", tgt: "garden.lexicon.nourishing-earthworm.crepeWatch:body.watchedAt", kind: "prop", name: Some("watchedAt") }
Non-Breaking Changes (13)
- AddedVertex AddedVertex { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch#place" }
- AddedVertex AddedVertex { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch#place.address" }
- AddedVertex AddedVertex { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch#place.fsqPlaceId" }
- AddedVertex AddedVertex { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch#place.latitude" }
- AddedVertex AddedVertex { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch#place.longitude" }
- AddedVertex AddedVertex { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch#place.name" }
- AddedVertex AddedVertex { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch:body.place" }
- AddedEdge AddedEdge { src: "garden.lexicon.nourishing-earthworm.crepeWatch#place", tgt: "garden.lexicon.nourishing-earthworm.crepeWatch#place.address", kind: "prop", name: Some("address") }
- AddedEdge AddedEdge { src: "garden.lexicon.nourishing-earthworm.crepeWatch#place", tgt: "garden.lexicon.nourishing-earthworm.crepeWatch#place.fsqPlaceId", kind: "prop", name: Some("fsqPlaceId") }
- AddedEdge AddedEdge { src: "garden.lexicon.nourishing-earthworm.crepeWatch#place", tgt: "garden.lexicon.nourishing-earthworm.crepeWatch#place.latitude", kind: "prop", name: Some("latitude") }
- AddedEdge AddedEdge { src: "garden.lexicon.nourishing-earthworm.crepeWatch#place", tgt: "garden.lexicon.nourishing-earthworm.crepeWatch#place.longitude", kind: "prop", name: Some("longitude") }
- AddedEdge AddedEdge { src: "garden.lexicon.nourishing-earthworm.crepeWatch:body", tgt: "garden.lexicon.nourishing-earthworm.crepeWatch:body.place", kind: "prop", name: Some("place") }
- AddedEdge AddedEdge { src: "garden.lexicon.nourishing-earthworm.crepeWatch:body.place", tgt: "garden.lexicon.nourishing-earthworm.crepeWatch#place", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch#place" }AddedVertex { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch#place.address" }AddedVertex { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch#place.fsqPlaceId" }AddedVertex { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch#place.latitude" }AddedVertex { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch#place.longitude" }AddedVertex { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch#place.name" }AddedVertex { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch:body.place" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch#place", src: "garden.lexicon.nourishing-earthworm.crepeWatch#place", tgt: "garden.lexicon.nourishing-earthworm.crepeWatch#place.name", kind: "prop", name: Some("name") }
- Breaking: RequiredEdgeRemoved { vertex_id: "garden.lexicon.nourishing-earthworm.crepeWatch:body", src: "garden.lexicon.nourishing-earthworm.crepeWatch:body", tgt: "garden.lexicon.nourishing-earthworm.crepeWatch:body.watchedAt", kind: "prop", name: Some("watchedAt") }
- Non-breaking: AddedEdge { src: "garden.lexicon.nourishing-earthworm.crepeWatch#place", tgt: "garden.lexicon.nourishing-earthworm.crepeWatch#place.address", kind: "prop", name: Some("address") }
- Non-breaking: AddedEdge { src: "garden.lexicon.nourishing-earthworm.crepeWatch#place", tgt: "garden.lexicon.nourishing-earthworm.crepeWatch#place.fsqPlaceId", kind: "prop", name: Some("fsqPlaceId") }
- Non-breaking: AddedEdge { src: "garden.lexicon.nourishing-earthworm.crepeWatch#place", tgt: "garden.lexicon.nourishing-earthworm.crepeWatch#place.latitude", kind: "prop", name: Some("latitude") }
- Non-breaking: AddedEdge { src: "garden.lexicon.nourishing-earthworm.crepeWatch#place", tgt: "garden.lexicon.nourishing-earthworm.crepeWatch#place.longitude", kind: "prop", name: Some("longitude") }
- Non-breaking: AddedEdge { src: "garden.lexicon.nourishing-earthworm.crepeWatch:body", tgt: "garden.lexicon.nourishing-earthworm.crepeWatch:body.place", kind: "prop", name: Some("place") }
- Non-breaking: AddedEdge { src: "garden.lexicon.nourishing-earthworm.crepeWatch:body.place", tgt: "garden.lexicon.nourishing-earthworm.crepeWatch#place", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"description": "One viewing of a movie, or of a TV show, season or episode, in crepe's private diary. A watch with no rating and no review text is a plain play (for example an episode Plex reported) and stays out of the diary log.",
6
6
"key": "tid",
7
7
"record": {
8
8
"properties": {
9
9
"containsSpoilers": {
10
10
"type": "boolean"
11
11
},
12
12
"createdAt": {
13
13
"description": "When this record was created (not the watch time).",
14
14
"format": "datetime",
15
15
"type": "string"
16
16
},
17
17
"episodeNumber": {
18
18
"description": "Required for episode watches.",
19
19
"minimum": 0,
20
20
"type": "integer"
21
21
},
22
22
"episodeTitle": {
23
23
"maxLength": 1000,
24
24
"type": "string"
25
25
},
26
26
"episodeTmdbId": {
27
27
"description": "The episode's own TMDB id, when known.",
28
28
"maxLength": 32,
29
29
"type": "string"
30
30
},
31
31
"genres": {
32
32
"items": {
33
33
"maxLength": 100,
34
34
"type": "string"
35
35
},
36
36
"maxLength": 20,
37
37
"type": "array"
38
38
},
39
39
"imdbId": {
40
40
"maxLength": 32,
41
41
"type": "string"
42
42
},
43
43
"kind": {
44
44
"description": "What was watched.",
45
45
"knownValues": [
46
46
"movie",
47
47
"show",
48
48
"season",
49
49
"episode"
50
50
],
51
51
"type": "string"
52
52
},
53
53
"mainCredit": {
54
54
"maxLength": 300,
55
55
"type": "string"
56
56
},
57
57
"mainCreditRole": {
58
58
"knownValues": [
59
59
"director",
60
60
"creator"
61
61
],
62
62
"type": "string"
63
63
},
64
+
"place": {
65
+
"description": "Where it was watched: a movie theater from the Foursquare places catalog, or any place of the user's own (\"Steve's house\").",
66
+
"ref": "#place",
67
+
"type": "ref"
68
+
},
64
69
"rating": {
65
70
"description": "Half stars out of five, times two. Absent means unrated.",
66
71
"maximum": 10,
67
72
"minimum": 1,
68
73
"type": "integer"
69
74
},
70
75
"releaseDate": {
71
76
"description": "Snapshot, YYYY-MM-DD.",
72
77
"maxLength": 32,
73
78
"type": "string"
74
79
},
75
80
"rewatch": {
81
+
"description": "deprecated 2026-09-29: derived by readers, no longer written",
76
82
"type": "boolean"
77
83
},
78
84
"seasonNumber": {
79
85
"description": "Required for season and episode watches.",
80
86
"minimum": 0,
81
87
"type": "integer"
82
88
},
83
89
"source": {
84
90
"description": "Where this watch was first recorded.",
85
91
"knownValues": [
86
92
"crepe",
87
93
"plex",
88
94
"popfeed",
89
95
"letterboxd"
90
96
],
91
97
"type": "string"
92
98
},
93
99
"stamps": {
94
100
"description": "Map of field group name to hybrid logical clock stamp, for field-level last-write-wins merge between devices and the sync server.",
95
101
"type": "unknown"
96
102
},
97
103
"tags": {
98
104
"items": {
99
105
"maxGraphemes": 64,
100
106
"maxLength": 640,
101
107
"type": "string"
102
108
},
103
109
"maxLength": 50,
104
110
"type": "array"
105
111
},
106
112
"text": {
107
113
"description": "Review text, plain.",
108
114
"maxGraphemes": 10000,
109
115
"maxLength": 100000,
110
116
"type": "string"
111
117
},
112
118
"title": {
113
119
"description": "Snapshot of the movie or show title, for offline display.",
114
120
"maxLength": 1000,
115
121
"type": "string"
116
122
},
117
123
"tmdbId": {
118
124
"description": "TMDB id of the movie, or of the show for show, season and episode watches. Never an episode's own id.",
119
125
"maxLength": 32,
120
126
"type": "string"
121
127
},
122
128
"updatedAt": {
123
129
"format": "datetime",
124
130
"type": "string"
125
131
},
126
132
"watchedAt": {
127
-
"description": "When it was watched.",
133
+
"description": "When it was watched. Absent for a watch logged without a date.",
128
134
"format": "datetime",
129
135
"type": "string"
130
136
}
131
137
},
132
138
"required": [
133
139
"kind",
134
140
"tmdbId",
135
-
"watchedAt",
136
141
"createdAt",
137
142
"updatedAt"
138
143
],
139
144
"type": "object"
140
145
},
141
146
"type": "record"
147
+
},
148
+
"place": {
149
+
"properties": {
150
+
"address": {
151
+
"description": "One-line address snapshot, for display.",
152
+
"maxGraphemes": 500,
153
+
"maxLength": 5000,
154
+
"type": "string"
155
+
},
156
+
"fsqPlaceId": {
157
+
"description": "Foursquare OS Places id when the place came from the catalog. Absent for a place of the user's own.",
158
+
"maxLength": 64,
159
+
"type": "string"
160
+
},
161
+
"latitude": {
162
+
"description": "Decimal degrees as a string, like community.lexicon.location.geo.",
163
+
"maxLength": 32,
164
+
"type": "string"
165
+
},
166
+
"longitude": {
167
+
"maxLength": 32,
168
+
"type": "string"
169
+
},
170
+
"name": {
171
+
"description": "Display name. A theater's catalog name, or whatever the user typed.",
172
+
"maxGraphemes": 300,
173
+
"maxLength": 3000,
174
+
"type": "string"
175
+
}
176
+
},
177
+
"required": [
178
+
"name"
179
+
],
180
+
"type": "object"
142
181
}
143
182
},
144
183
"id": "garden.lexicon.nourishing-earthworm.crepeWatch",
145
184
"lexicon": 1
146
185
}