app.atmobb.actor.profile
Schema Diff
+94 -2
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 42 non-breaking changes.
Breaking Changes (2)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#forumProfile", src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.fields", kind: "prop", name: Some("fields") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#forumProfile", src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.forum", kind: "prop", name: Some("forum") }
Non-Breaking Changes (42)
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.avatar" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.description" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.displayName" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.fields" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.fields:items" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.forum" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.notifications" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.pronouns" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items:variant0" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items:variant1" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items:variant2" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items:variant3" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.title" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.website" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile:body.forumProfiles" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile:body.forumProfiles:items" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile:body.notifications" }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.avatar", kind: "prop", name: Some("avatar") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.description", kind: "prop", name: Some("description") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.displayName", kind: "prop", name: Some("displayName") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.notifications", kind: "prop", name: Some("notifications") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.pronouns", kind: "prop", name: Some("pronouns") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.signature", kind: "prop", name: Some("signature") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.title", kind: "prop", name: Some("title") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.website", kind: "prop", name: Some("website") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.fields", tgt: "app.atmobb.actor.profile#forumProfile.fields:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature", tgt: "app.atmobb.actor.profile#forumProfile.signature:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items", tgt: "app.atmobb.actor.profile#forumProfile.signature:items:variant0", kind: "variant", name: Some("app.atmobb.richtext.block#text") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items", tgt: "app.atmobb.actor.profile#forumProfile.signature:items:variant1", kind: "variant", name: Some("app.atmobb.richtext.block#quote") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items", tgt: "app.atmobb.actor.profile#forumProfile.signature:items:variant2", kind: "variant", name: Some("app.atmobb.richtext.block#code") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items", tgt: "app.atmobb.actor.profile#forumProfile.signature:items:variant3", kind: "variant", name: Some("app.atmobb.richtext.block#image") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items:variant0", tgt: "app.atmobb.richtext.block#text", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items:variant1", tgt: "app.atmobb.richtext.block#quote", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items:variant2", tgt: "app.atmobb.richtext.block#code", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items:variant3", tgt: "app.atmobb.richtext.block#image", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile:body", tgt: "app.atmobb.actor.profile:body.forumProfiles", kind: "prop", name: Some("forumProfiles") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile:body", tgt: "app.atmobb.actor.profile:body.notifications", kind: "prop", name: Some("notifications") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile:body.forumProfiles", tgt: "app.atmobb.actor.profile:body.forumProfiles:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile:body.forumProfiles:items", tgt: "app.atmobb.actor.profile#forumProfile", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile" }AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.avatar" }AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.description" }AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.displayName" }AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.fields" }AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.fields:items" }AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.forum" }AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.notifications" }AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.pronouns" }AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature" }AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items" }AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items:variant0" }AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items:variant1" }AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items:variant2" }AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.signature:items:variant3" }AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.title" }AddedVertex { vertex_id: "app.atmobb.actor.profile#forumProfile.website" }AddedVertex { vertex_id: "app.atmobb.actor.profile:body.forumProfiles" }AddedVertex { vertex_id: "app.atmobb.actor.profile:body.forumProfiles:items" }AddedVertex { vertex_id: "app.atmobb.actor.profile:body.notifications" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#forumProfile", src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.fields", kind: "prop", name: Some("fields") }
- Breaking: RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#forumProfile", src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.forum", kind: "prop", name: Some("forum") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.avatar", kind: "prop", name: Some("avatar") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.description", kind: "prop", name: Some("description") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.displayName", kind: "prop", name: Some("displayName") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.notifications", kind: "prop", name: Some("notifications") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.pronouns", kind: "prop", name: Some("pronouns") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.signature", kind: "prop", name: Some("signature") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.title", kind: "prop", name: Some("title") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile", tgt: "app.atmobb.actor.profile#forumProfile.website", kind: "prop", name: Some("website") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.fields", tgt: "app.atmobb.actor.profile#forumProfile.fields:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature", tgt: "app.atmobb.actor.profile#forumProfile.signature:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items", tgt: "app.atmobb.actor.profile#forumProfile.signature:items:variant0", kind: "variant", name: Some("app.atmobb.richtext.block#text") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items", tgt: "app.atmobb.actor.profile#forumProfile.signature:items:variant1", kind: "variant", name: Some("app.atmobb.richtext.block#quote") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items", tgt: "app.atmobb.actor.profile#forumProfile.signature:items:variant2", kind: "variant", name: Some("app.atmobb.richtext.block#code") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items", tgt: "app.atmobb.actor.profile#forumProfile.signature:items:variant3", kind: "variant", name: Some("app.atmobb.richtext.block#image") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items:variant0", tgt: "app.atmobb.richtext.block#text", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items:variant1", tgt: "app.atmobb.richtext.block#quote", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items:variant2", tgt: "app.atmobb.richtext.block#code", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#forumProfile.signature:items:variant3", tgt: "app.atmobb.richtext.block#image", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile:body", tgt: "app.atmobb.actor.profile:body.forumProfiles", kind: "prop", name: Some("forumProfiles") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile:body", tgt: "app.atmobb.actor.profile:body.notifications", kind: "prop", name: Some("notifications") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile:body.forumProfiles", tgt: "app.atmobb.actor.profile:body.forumProfiles:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile:body.forumProfiles:items", tgt: "app.atmobb.actor.profile#forumProfile", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"avatarBuilder": {
5
5
"description": "Legacy built avatar as part + colour choices. Kept so existing records stay valid.",
6
6
"properties": {
7
7
"accessory": {
8
8
"ref": "#part",
9
9
"type": "ref"
10
10
},
11
11
"eyebrows": {
12
12
"ref": "#part",
13
13
"type": "ref"
14
14
},
15
15
"eyes": {
16
16
"ref": "#part",
17
17
"type": "ref"
18
18
},
19
19
"facialFeature": {
20
20
"ref": "#part",
21
21
"type": "ref"
22
22
},
23
23
"facialHair": {
24
24
"ref": "#part",
25
25
"type": "ref"
26
26
},
27
27
"hairBack": {
28
28
"ref": "#part",
29
29
"type": "ref"
30
30
},
31
31
"hairFront": {
32
32
"ref": "#part",
33
33
"type": "ref"
34
34
},
35
35
"hat": {
36
36
"ref": "#part",
37
37
"type": "ref"
38
38
},
39
39
"mouth": {
40
40
"ref": "#part",
41
41
"type": "ref"
42
42
},
43
43
"neckwear": {
44
44
"ref": "#garment",
45
45
"type": "ref"
46
46
},
47
47
"nose": {
48
48
"ref": "#part",
49
49
"type": "ref"
50
50
},
51
51
"skin": {
52
52
"description": "Skin tone id; drives body, head, nose and facial-feature colouring.",
53
53
"type": "string"
54
54
},
55
55
"top": {
56
56
"ref": "#garment",
57
57
"type": "ref"
58
58
},
59
59
"v": {
60
60
"description": "Recipe schema version.",
61
61
"minimum": 1,
62
62
"type": "integer"
63
63
}
64
64
},
65
65
"required": [
66
66
"v",
67
67
"skin"
68
68
],
69
69
"type": "object"
70
70
},
71
+
"forumProfile": {
72
+
"properties": {
73
+
"avatar": {
74
+
"accept": [
75
+
"image/png",
76
+
"image/jpeg",
77
+
"image/webp",
78
+
"image/gif"
79
+
],
80
+
"maxSize": 1000000,
81
+
"type": "blob"
82
+
},
83
+
"description": {
84
+
"maxGraphemes": 256,
85
+
"maxLength": 2560,
86
+
"type": "string"
87
+
},
88
+
"displayName": {
89
+
"maxGraphemes": 64,
90
+
"maxLength": 640,
91
+
"type": "string"
92
+
},
93
+
"fields": {
94
+
"description": "Only listed fields override defaults. A listed field with no value explicitly clears it (avatar falls back to Bluesky); remove it from this list to inherit again.",
95
+
"items": {
96
+
"knownValues": [
97
+
"displayName",
98
+
"description",
99
+
"pronouns",
100
+
"website",
101
+
"signature",
102
+
"avatar",
103
+
"title",
104
+
"notifications"
105
+
],
106
+
"type": "string"
107
+
},
108
+
"type": "array"
109
+
},
110
+
"forum": {
111
+
"format": "did",
112
+
"type": "string"
113
+
},
114
+
"notifications": {
115
+
"type": "boolean"
116
+
},
117
+
"pronouns": {
118
+
"maxGraphemes": 64,
119
+
"maxLength": 640,
120
+
"type": "string"
121
+
},
122
+
"signature": {
123
+
"items": {
124
+
"refs": [
125
+
"app.atmobb.richtext.block#text",
126
+
"app.atmobb.richtext.block#quote",
127
+
"app.atmobb.richtext.block#code",
128
+
"app.atmobb.richtext.block#image"
129
+
],
130
+
"type": "union"
131
+
},
132
+
"maxLength": 3,
133
+
"type": "array"
134
+
},
135
+
"title": {
136
+
"maxGraphemes": 64,
137
+
"maxLength": 640,
138
+
"type": "string"
139
+
},
140
+
"website": {
141
+
"format": "uri",
142
+
"type": "string"
143
+
}
144
+
},
145
+
"required": [
146
+
"forum",
147
+
"fields"
148
+
],
149
+
"type": "object"
150
+
},
71
151
"forumTheme": {
72
152
"properties": {
73
153
"forum": {
74
154
"format": "did",
75
155
"type": "string"
76
156
},
77
157
"theme": {
78
158
"knownValues": [
79
159
"",
80
160
"classic",
81
161
"sky",
82
162
"bubblegum",
83
163
"midnight",
84
164
"forest"
85
165
],
86
166
"maxLength": 64,
87
167
"type": "string"
88
168
}
89
169
},
90
170
"required": [
91
171
"forum",
92
172
"theme"
93
173
],
94
174
"type": "object"
95
175
},
96
176
"garment": {
97
177
"description": "A garment choice: which type (e.g. jacket, tie) in which colour.",
98
178
"properties": {
99
179
"color": {
100
180
"type": "string"
101
181
},
102
182
"type": {
103
183
"type": "string"
104
184
}
105
185
},
106
186
"required": [
107
187
"type",
108
188
"color"
109
189
],
110
190
"type": "object"
111
191
},
112
192
"main": {
113
-
"description": "A user's atmoBB profile, global across all forums. Lives in the user's repo.",
193
+
"description": "A user's atmoBB account defaults and per-forum overrides. Lives in the user's repo.",
114
194
"key": "literal:self",
115
195
"record": {
116
196
"properties": {
117
197
"avatar": {
118
198
"accept": [
119
199
"image/png",
120
200
"image/jpeg",
121
201
"image/webp",
122
202
"image/gif"
123
203
],
124
204
"maxSize": 1000000,
125
205
"type": "blob"
126
206
},
127
207
"avatarBuilder": {
128
208
"description": "Legacy layered-avatar recipe from an earlier builder. atmobb ignores it; clients should read the `avatar` blob.",
129
209
"ref": "#avatarBuilder",
130
210
"type": "ref"
131
211
},
132
212
"createdAt": {
133
213
"format": "datetime",
134
214
"type": "string"
135
215
},
136
216
"description": {
137
-
"description": "Free-text bio, shown on the profile's About panel. Global across forums.",
217
+
"description": "Default free-text bio, shown on the profile's About panel unless overridden for a forum.",
138
218
"maxGraphemes": 256,
139
219
"maxLength": 2560,
140
220
"type": "string"
141
221
},
142
222
"displayName": {
143
223
"maxGraphemes": 64,
144
224
"maxLength": 640,
145
225
"type": "string"
146
226
},
227
+
"forumProfiles": {
228
+
"description": "Per-forum overrides for profile fields and notification preferences. Other fields inherit account defaults.",
229
+
"items": {
230
+
"ref": "#forumProfile",
231
+
"type": "ref"
232
+
},
233
+
"type": "array"
234
+
},
147
235
"forumThemes": {
148
236
"description": "Per-forum personal theme overrides. Omit a forum to use the global theme; an empty theme preserves that forum's own styling.",
149
237
"items": {
150
238
"ref": "#forumTheme",
151
239
"type": "ref"
152
240
},
153
241
"type": "array"
154
242
},
243
+
"notifications": {
244
+
"description": "Whether connected forums may notify this account. Defaults to true; never grants relay permission.",
245
+
"type": "boolean"
246
+
},
155
247
"pronouns": {
156
248
"maxGraphemes": 64,
157
249
"maxLength": 640,
158
250
"type": "string"
159
251
},
160
252
"signature": {
161
253
"description": "Rendered under every post, phpBB style. Keep it short; clients may truncate.",
162
254
"items": {
163
255
"refs": [
164
256
"app.atmobb.richtext.block#text",
165
257
"app.atmobb.richtext.block#quote",
166
258
"app.atmobb.richtext.block#code",
167
259
"app.atmobb.richtext.block#image"
168
260
],
169
261
"type": "union"
170
262
},
171
263
"maxLength": 3,
172
264
"type": "array"
173
265
},
174
266
"theme": {
175
267
"description": "Personal color theme across forums. Omit to follow each forum's default styling.",
176
268
"knownValues": [
177
269
"classic",
178
270
"sky",
179
271
"bubblegum",
180
272
"midnight",
181
273
"forest"
182
274
],
183
275
"maxLength": 64,
184
276
"type": "string"
185
277
},
186
278
"title": {
187
279
"description": "Self-chosen user title, shown under the username where the forum allows it.",
188
280
"maxGraphemes": 64,
189
281
"maxLength": 640,
190
282
"type": "string"
191
283
},
192
284
"website": {
193
285
"format": "uri",
194
286
"type": "string"
195
287
}
196
288
},
197
289
"type": "object"
198
290
},
199
291
"type": "record"
200
292
},
201
293
"part": {
202
294
"description": "A part choice: a shape id and, where the part is colourable, a palette colour id.",
203
295
"properties": {
204
296
"color": {
205
297
"type": "string"
206
298
},
207
299
"shape": {
208
300
"type": "string"
209
301
}
210
302
},
211
303
"required": [
212
304
"shape"
213
305
],
214
306
"type": "object"
215
307
}
216
308
},
217
309
"id": "app.atmobb.actor.profile",
218
310
"lexicon": 1
219
311
}