space.opendeck.profile
Schema Diff
+161 -0
Compatibility Analysis
Breaking Changes Detected
7 breaking changes, 43 non-breaking changes.
Breaking Changes (7)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.secondsStudied", kind: "prop", name: Some("secondsStudied") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.activity", kind: "prop", name: Some("activity") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.updatedAt", kind: "prop", name: Some("updatedAt") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.repetitions", kind: "prop", name: Some("repetitions") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.learned", kind: "prop", name: Some("learned") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.learning", kind: "prop", name: Some("learning") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.activityEnd", kind: "prop", name: Some("activityEnd") }
Non-Breaking Changes (43)
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.activity" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.activity:items" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.activityEnd" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.firstStudiedOn" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.lastStudiedAt" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.learned" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.learning" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.repetitions" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.retention" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.secondsStudied" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile#publicStats.updatedAt" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.breakReminders" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.creditStyle" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.publicStats" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.showCredits" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.showMotivation" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.showStats" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.showTier" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.studyDays" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.studyDays:items" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.studyDaysEnd" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.studyTier" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.studyTierAt" }
- AddedVertex AddedVertex { vertex_id: "space.opendeck.profile:body.tierStyle" }
- AddedEdge AddedEdge { src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.firstStudiedOn", kind: "prop", name: Some("firstStudiedOn") }
- AddedEdge AddedEdge { src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.lastStudiedAt", kind: "prop", name: Some("lastStudiedAt") }
- AddedEdge AddedEdge { src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.retention", kind: "prop", name: Some("retention") }
- AddedEdge AddedEdge { src: "space.opendeck.profile#publicStats.activity", tgt: "space.opendeck.profile#publicStats.activity:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.breakReminders", kind: "prop", name: Some("breakReminders") }
- AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.creditStyle", kind: "prop", name: Some("creditStyle") }
- AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.publicStats", kind: "prop", name: Some("publicStats") }
- AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showCredits", kind: "prop", name: Some("showCredits") }
- AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showMotivation", kind: "prop", name: Some("showMotivation") }
- AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showStats", kind: "prop", name: Some("showStats") }
- AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showTier", kind: "prop", name: Some("showTier") }
- AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.studyDays", kind: "prop", name: Some("studyDays") }
- AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.studyDaysEnd", kind: "prop", name: Some("studyDaysEnd") }
- AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.studyTier", kind: "prop", name: Some("studyTier") }
- AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.studyTierAt", kind: "prop", name: Some("studyTierAt") }
- AddedEdge AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.tierStyle", kind: "prop", name: Some("tierStyle") }
- AddedEdge AddedEdge { src: "space.opendeck.profile:body.publicStats", tgt: "space.opendeck.profile#publicStats", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "space.opendeck.profile:body.studyDays", tgt: "space.opendeck.profile:body.studyDays:items", kind: "items", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "space.opendeck.profile#publicStats" }AddedVertex { vertex_id: "space.opendeck.profile#publicStats.activity" }AddedVertex { vertex_id: "space.opendeck.profile#publicStats.activity:items" }AddedVertex { vertex_id: "space.opendeck.profile#publicStats.activityEnd" }AddedVertex { vertex_id: "space.opendeck.profile#publicStats.firstStudiedOn" }AddedVertex { vertex_id: "space.opendeck.profile#publicStats.lastStudiedAt" }AddedVertex { vertex_id: "space.opendeck.profile#publicStats.learned" }AddedVertex { vertex_id: "space.opendeck.profile#publicStats.learning" }AddedVertex { vertex_id: "space.opendeck.profile#publicStats.repetitions" }AddedVertex { vertex_id: "space.opendeck.profile#publicStats.retention" }AddedVertex { vertex_id: "space.opendeck.profile#publicStats.secondsStudied" }AddedVertex { vertex_id: "space.opendeck.profile#publicStats.updatedAt" }AddedVertex { vertex_id: "space.opendeck.profile:body.breakReminders" }AddedVertex { vertex_id: "space.opendeck.profile:body.creditStyle" }AddedVertex { vertex_id: "space.opendeck.profile:body.publicStats" }AddedVertex { vertex_id: "space.opendeck.profile:body.showCredits" }AddedVertex { vertex_id: "space.opendeck.profile:body.showMotivation" }AddedVertex { vertex_id: "space.opendeck.profile:body.showStats" }AddedVertex { vertex_id: "space.opendeck.profile:body.showTier" }AddedVertex { vertex_id: "space.opendeck.profile:body.studyDays" }AddedVertex { vertex_id: "space.opendeck.profile:body.studyDays:items" }AddedVertex { vertex_id: "space.opendeck.profile:body.studyDaysEnd" }AddedVertex { vertex_id: "space.opendeck.profile:body.studyTier" }AddedVertex { vertex_id: "space.opendeck.profile:body.studyTierAt" }AddedVertex { vertex_id: "space.opendeck.profile:body.tierStyle" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.secondsStudied", kind: "prop", name: Some("secondsStudied") }
- Breaking: RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.activity", kind: "prop", name: Some("activity") }
- Breaking: RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.updatedAt", kind: "prop", name: Some("updatedAt") }
- Breaking: RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.repetitions", kind: "prop", name: Some("repetitions") }
- Breaking: RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.learned", kind: "prop", name: Some("learned") }
- Breaking: RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.learning", kind: "prop", name: Some("learning") }
- Breaking: RequiredEdgeAdded { vertex_id: "space.opendeck.profile#publicStats", src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.activityEnd", kind: "prop", name: Some("activityEnd") }
- Non-breaking: AddedEdge { src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.firstStudiedOn", kind: "prop", name: Some("firstStudiedOn") }
- Non-breaking: AddedEdge { src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.lastStudiedAt", kind: "prop", name: Some("lastStudiedAt") }
- Non-breaking: AddedEdge { src: "space.opendeck.profile#publicStats", tgt: "space.opendeck.profile#publicStats.retention", kind: "prop", name: Some("retention") }
- Non-breaking: AddedEdge { src: "space.opendeck.profile#publicStats.activity", tgt: "space.opendeck.profile#publicStats.activity:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.breakReminders", kind: "prop", name: Some("breakReminders") }
- Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.creditStyle", kind: "prop", name: Some("creditStyle") }
- Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.publicStats", kind: "prop", name: Some("publicStats") }
- Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showCredits", kind: "prop", name: Some("showCredits") }
- Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showMotivation", kind: "prop", name: Some("showMotivation") }
- Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showStats", kind: "prop", name: Some("showStats") }
- Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.showTier", kind: "prop", name: Some("showTier") }
- Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.studyDays", kind: "prop", name: Some("studyDays") }
- Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.studyDaysEnd", kind: "prop", name: Some("studyDaysEnd") }
- Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.studyTier", kind: "prop", name: Some("studyTier") }
- Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.studyTierAt", kind: "prop", name: Some("studyTierAt") }
- Non-breaking: AddedEdge { src: "space.opendeck.profile:body", tgt: "space.opendeck.profile:body.tierStyle", kind: "prop", name: Some("tierStyle") }
- Non-breaking: AddedEdge { src: "space.opendeck.profile:body.publicStats", tgt: "space.opendeck.profile#publicStats", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "space.opendeck.profile:body.studyDays", tgt: "space.opendeck.profile:body.studyDays:items", kind: "items", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"description": "OpenDeck profile and synced preferences.",
6
6
"key": "literal:self",
7
7
"record": {
8
8
"properties": {
9
9
"accentColor": {
10
10
"description": "Hex accent color, e.g. #3b82f6.",
11
11
"maxGraphemes": 9,
12
12
"maxLength": 90,
13
13
"type": "string"
14
14
},
15
15
"bio": {
16
16
"maxGraphemes": 2000,
17
17
"maxLength": 20000,
18
18
"type": "string"
19
19
},
20
+
"breakReminders": {
21
+
"description": "Suggest breaks after long study sessions or days; absent means on.",
22
+
"type": "boolean"
23
+
},
24
+
"creditStyle": {
25
+
"description": "How shown credit roles look: theme styles the whole profile, badges only lists them; absent means theme.",
26
+
"enum": [
27
+
"theme",
28
+
"badges"
29
+
],
30
+
"type": "string"
31
+
},
20
32
"defaultVisibility": {
21
33
"enum": [
22
34
"public",
23
35
"private"
24
36
],
25
37
"type": "string"
26
38
},
39
+
"publicStats": {
40
+
"description": "Summary of your study stats without deck or card details; only present while showStats is everyone.",
41
+
"ref": "space.opendeck.profile#publicStats",
42
+
"type": "ref"
43
+
},
27
44
"reminderDays": {
28
45
"description": "Weekdays 0-6 (Sun-Sat); absent means Monday to Friday.",
29
46
"items": {
30
47
"maximum": 6,
31
48
"minimum": 0,
32
49
"type": "integer"
33
50
},
34
51
"maxLength": 7,
35
52
"type": "array"
36
53
},
37
54
"reminderEnabled": {
38
55
"type": "boolean"
39
56
},
40
57
"reminderHour": {
41
58
"description": "Local hour (0-23) of the study reminder; absent means 19.",
42
59
"maximum": 23,
43
60
"minimum": 0,
44
61
"type": "integer"
45
62
},
46
63
"shortTermIntervals": {
47
64
"description": "Default short-term intervals preset; absent means auto.",
48
65
"enum": [
49
66
"auto",
50
67
"quick",
51
68
"balanced",
52
69
"relaxed",
53
70
"spaced"
54
71
],
55
72
"type": "string"
56
73
},
57
74
"showActivityOnProfile": {
58
75
"type": "boolean"
59
76
},
77
+
"showCredits": {
78
+
"description": "Who sees your OpenDeck credit roles on your profile; absent means everyone.",
79
+
"enum": [
80
+
"nobody",
81
+
"me",
82
+
"everyone"
83
+
],
84
+
"type": "string"
85
+
},
60
86
"showDecksOnProfile": {
61
87
"type": "boolean"
62
88
},
63
89
"showFollowsOnProfile": {
64
90
"type": "boolean"
65
91
},
92
+
"showMotivation": {
93
+
"description": "Who sees tier progress boxes: nobody hides them, me shows them on the home, study and profile pages, everyone also shows the profile box to visitors (only while showTier is everyone); absent means me.",
94
+
"enum": [
95
+
"nobody",
96
+
"me",
97
+
"everyone"
98
+
],
99
+
"type": "string"
100
+
},
66
101
"showProgressOnProfile": {
67
102
"type": "boolean"
68
103
},
104
+
"showStats": {
105
+
"description": "Who sees your study stats on your profile; absent means me.",
106
+
"enum": [
107
+
"nobody",
108
+
"me",
109
+
"everyone"
110
+
],
111
+
"type": "string"
112
+
},
113
+
"showTier": {
114
+
"description": "Who sees your study tier on your profile, and with everyone also in battles; absent means me.",
115
+
"enum": [
116
+
"nobody",
117
+
"me",
118
+
"everyone"
119
+
],
120
+
"type": "string"
121
+
},
122
+
"studyDays": {
123
+
"description": "Study sessions per day (capped at 3) for the 84 days up to studyDaysEnd, oldest first; only present while the motivation box is public.",
124
+
"items": {
125
+
"maximum": 3,
126
+
"minimum": 0,
127
+
"type": "integer"
128
+
},
129
+
"maxLength": 84,
130
+
"type": "array"
131
+
},
132
+
"studyDaysEnd": {
133
+
"description": "Local date (YYYY-MM-DD) of the last entry in studyDays.",
134
+
"maxGraphemes": 10,
135
+
"maxLength": 100,
136
+
"type": "string"
137
+
},
138
+
"studyTier": {
139
+
"description": "Study tier from the days studied in the last four weeks; only present while it is shown publicly.",
140
+
"enum": [
141
+
"bronze",
142
+
"silver",
143
+
"gold",
144
+
"platinum",
145
+
"diamond",
146
+
"champion",
147
+
"grandChampion",
148
+
"supernova"
149
+
],
150
+
"type": "string"
151
+
},
152
+
"studyTierAt": {
153
+
"description": "When studyTier was last computed.",
154
+
"format": "datetime",
155
+
"type": "string"
156
+
},
157
+
"tierStyle": {
158
+
"description": "How a shown tier looks: theme styles the whole profile, badge only adds a badge; absent means theme.",
159
+
"enum": [
160
+
"theme",
161
+
"badge"
162
+
],
163
+
"type": "string"
164
+
},
69
165
"uiLanguage": {
70
166
"description": "BCP-47 language tag for the OpenDeck interface.",
71
167
"maxGraphemes": 20,
72
168
"maxLength": 200,
73
169
"type": "string"
74
170
},
75
171
"updatedAt": {
76
172
"format": "datetime",
77
173
"type": "string"
78
174
}
79
175
},
80
176
"type": "object"
81
177
},
82
178
"type": "record"
179
+
},
180
+
"publicStats": {
181
+
"properties": {
182
+
"activity": {
183
+
"description": "Repetitions per day for the days up to activityEnd, oldest first.",
184
+
"items": {
185
+
"minimum": 0,
186
+
"type": "integer"
187
+
},
188
+
"maxLength": 371,
189
+
"type": "array"
190
+
},
191
+
"activityEnd": {
192
+
"description": "Local date (YYYY-MM-DD) of the last entry in activity.",
193
+
"maxGraphemes": 10,
194
+
"maxLength": 100,
195
+
"type": "string"
196
+
},
197
+
"firstStudiedOn": {
198
+
"description": "Local date (YYYY-MM-DD) of the first study day.",
199
+
"maxGraphemes": 10,
200
+
"maxLength": 100,
201
+
"type": "string"
202
+
},
203
+
"lastStudiedAt": {
204
+
"format": "datetime",
205
+
"type": "string"
206
+
},
207
+
"learned": {
208
+
"description": "Cards in review.",
209
+
"type": "integer"
210
+
},
211
+
"learning": {
212
+
"description": "Cards in learning or relearning.",
213
+
"type": "integer"
214
+
},
215
+
"repetitions": {
216
+
"description": "All ratings ever given.",
217
+
"type": "integer"
218
+
},
219
+
"retention": {
220
+
"description": "Percent of ratings in the last 30 days that were not again.",
221
+
"maximum": 100,
222
+
"minimum": 0,
223
+
"type": "integer"
224
+
},
225
+
"secondsStudied": {
226
+
"description": "Active study time in the last 365 days.",
227
+
"type": "integer"
228
+
},
229
+
"updatedAt": {
230
+
"format": "datetime",
231
+
"type": "string"
232
+
}
233
+
},
234
+
"required": [
235
+
"learned",
236
+
"learning",
237
+
"repetitions",
238
+
"secondsStudied",
239
+
"activity",
240
+
"activityEnd",
241
+
"updatedAt"
242
+
],
243
+
"type": "object"
83
244
}
84
245
},
85
246
"id": "space.opendeck.profile",
86
247
"lexicon": 1
87
248
}