app.atmobb.forum.profile
Schema Diff
+69 -1
Compatibility Analysis
Backward Compatible
Backward compatible. 33 non-breaking changes.
Non-Breaking Changes (33)
- AddedVertex AddedVertex { vertex_id: "app.atmobb.forum.profile#membership" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.forum.profile#membership.gatedSince" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.forum.profile#membership.inviteCap" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.forum.profile#membership.inviteDays" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.forum.profile#membership.mode" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.forum.profile#membership.prompt" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.forum.profile:body.hideCredit" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.forum.profile:body.hideDefaultStamps" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.forum.profile:body.hideProfileSkins" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.forum.profile:body.intro" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.forum.profile:body.intro:items" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.forum.profile:body.intro:items:variant0" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.forum.profile:body.intro:items:variant1" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.forum.profile:body.intro:items:variant2" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.forum.profile:body.membership" }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile#membership", tgt: "app.atmobb.forum.profile#membership.gatedSince", kind: "prop", name: Some("gatedSince") }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile#membership", tgt: "app.atmobb.forum.profile#membership.inviteCap", kind: "prop", name: Some("inviteCap") }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile#membership", tgt: "app.atmobb.forum.profile#membership.inviteDays", kind: "prop", name: Some("inviteDays") }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile#membership", tgt: "app.atmobb.forum.profile#membership.mode", kind: "prop", name: Some("mode") }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile#membership", tgt: "app.atmobb.forum.profile#membership.prompt", kind: "prop", name: Some("prompt") }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile:body", tgt: "app.atmobb.forum.profile:body.hideCredit", kind: "prop", name: Some("hideCredit") }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile:body", tgt: "app.atmobb.forum.profile:body.hideDefaultStamps", kind: "prop", name: Some("hideDefaultStamps") }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile:body", tgt: "app.atmobb.forum.profile:body.hideProfileSkins", kind: "prop", name: Some("hideProfileSkins") }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile:body", tgt: "app.atmobb.forum.profile:body.intro", kind: "prop", name: Some("intro") }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile:body", tgt: "app.atmobb.forum.profile:body.membership", kind: "prop", name: Some("membership") }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile:body.intro", tgt: "app.atmobb.forum.profile:body.intro:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile:body.intro:items", tgt: "app.atmobb.forum.profile:body.intro:items:variant0", kind: "variant", name: Some("app.atmobb.richtext.block#text") }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile:body.intro:items", tgt: "app.atmobb.forum.profile:body.intro:items:variant1", kind: "variant", name: Some("app.atmobb.richtext.block#quote") }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile:body.intro:items", tgt: "app.atmobb.forum.profile:body.intro:items:variant2", kind: "variant", name: Some("app.atmobb.richtext.block#code") }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile:body.intro:items:variant0", tgt: "app.atmobb.richtext.block#text", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile:body.intro:items:variant1", tgt: "app.atmobb.richtext.block#quote", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile:body.intro:items:variant2", tgt: "app.atmobb.richtext.block#code", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.forum.profile:body.membership", tgt: "app.atmobb.forum.profile#membership", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.atmobb.forum.profile#membership" }AddedVertex { vertex_id: "app.atmobb.forum.profile#membership.gatedSince" }AddedVertex { vertex_id: "app.atmobb.forum.profile#membership.inviteCap" }AddedVertex { vertex_id: "app.atmobb.forum.profile#membership.inviteDays" }AddedVertex { vertex_id: "app.atmobb.forum.profile#membership.mode" }AddedVertex { vertex_id: "app.atmobb.forum.profile#membership.prompt" }AddedVertex { vertex_id: "app.atmobb.forum.profile:body.hideCredit" }AddedVertex { vertex_id: "app.atmobb.forum.profile:body.hideDefaultStamps" }AddedVertex { vertex_id: "app.atmobb.forum.profile:body.hideProfileSkins" }AddedVertex { vertex_id: "app.atmobb.forum.profile:body.intro" }AddedVertex { vertex_id: "app.atmobb.forum.profile:body.intro:items" }AddedVertex { vertex_id: "app.atmobb.forum.profile:body.intro:items:variant0" }AddedVertex { vertex_id: "app.atmobb.forum.profile:body.intro:items:variant1" }AddedVertex { vertex_id: "app.atmobb.forum.profile:body.intro:items:variant2" }AddedVertex { vertex_id: "app.atmobb.forum.profile:body.membership" }
Additional Notes
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile#membership", tgt: "app.atmobb.forum.profile#membership.gatedSince", kind: "prop", name: Some("gatedSince") }
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile#membership", tgt: "app.atmobb.forum.profile#membership.inviteCap", kind: "prop", name: Some("inviteCap") }
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile#membership", tgt: "app.atmobb.forum.profile#membership.inviteDays", kind: "prop", name: Some("inviteDays") }
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile#membership", tgt: "app.atmobb.forum.profile#membership.mode", kind: "prop", name: Some("mode") }
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile#membership", tgt: "app.atmobb.forum.profile#membership.prompt", kind: "prop", name: Some("prompt") }
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile:body", tgt: "app.atmobb.forum.profile:body.hideCredit", kind: "prop", name: Some("hideCredit") }
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile:body", tgt: "app.atmobb.forum.profile:body.hideDefaultStamps", kind: "prop", name: Some("hideDefaultStamps") }
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile:body", tgt: "app.atmobb.forum.profile:body.hideProfileSkins", kind: "prop", name: Some("hideProfileSkins") }
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile:body", tgt: "app.atmobb.forum.profile:body.intro", kind: "prop", name: Some("intro") }
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile:body", tgt: "app.atmobb.forum.profile:body.membership", kind: "prop", name: Some("membership") }
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile:body.intro", tgt: "app.atmobb.forum.profile:body.intro:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile:body.intro:items", tgt: "app.atmobb.forum.profile:body.intro:items:variant0", kind: "variant", name: Some("app.atmobb.richtext.block#text") }
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile:body.intro:items", tgt: "app.atmobb.forum.profile:body.intro:items:variant1", kind: "variant", name: Some("app.atmobb.richtext.block#quote") }
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile:body.intro:items", tgt: "app.atmobb.forum.profile:body.intro:items:variant2", kind: "variant", name: Some("app.atmobb.richtext.block#code") }
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile:body.intro:items:variant0", tgt: "app.atmobb.richtext.block#text", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile:body.intro:items:variant1", tgt: "app.atmobb.richtext.block#quote", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile:body.intro:items:variant2", tgt: "app.atmobb.richtext.block#code", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.forum.profile:body.membership", tgt: "app.atmobb.forum.profile#membership", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"font": {
5
5
"properties": {
6
6
"family": {
7
7
"maxGraphemes": 64,
8
8
"maxLength": 640,
9
9
"type": "string"
10
10
},
11
11
"source": {
12
12
"accept": [
13
13
"font/woff",
14
14
"font/woff2"
15
15
],
16
16
"maxSize": 2000000,
17
17
"type": "blob"
18
18
},
19
19
"style": {
20
20
"knownValues": [
21
21
"normal",
22
22
"italic"
23
23
],
24
24
"maxLength": 16,
25
25
"type": "string"
26
26
},
27
27
"weight": {
28
28
"maximum": 900,
29
29
"minimum": 100,
30
30
"type": "integer"
31
31
}
32
32
},
33
33
"required": [
34
34
"family",
35
35
"weight",
36
36
"style",
37
37
"source"
38
38
],
39
39
"type": "object"
40
40
},
41
41
"homepage": {
42
42
"properties": {
43
43
"featuredThreads": {
44
44
"items": {
45
45
"format": "at-uri",
46
46
"type": "string"
47
47
},
48
48
"maxLength": 3,
49
49
"type": "array"
50
50
},
51
51
"layout": {
52
52
"knownValues": [
53
53
"boards",
54
54
"latest",
55
55
"categories-latest"
56
56
],
57
57
"maxLength": 32,
58
58
"type": "string"
59
59
},
60
60
"sidebar": {
61
61
"type": "boolean"
62
62
},
63
63
"welcome": {
64
64
"knownValues": [
65
65
"classic",
66
66
"compact",
67
67
"hidden"
68
68
],
69
69
"maxLength": 32,
70
70
"type": "string"
71
71
}
72
72
},
73
73
"type": "object"
74
74
},
75
75
"main": {
76
76
"description": "A forum's identity and configuration. Lives in the forum account's repo; the forum's DID is the forum's identity.",
77
77
"key": "literal:self",
78
78
"record": {
79
79
"properties": {
80
80
"avatar": {
81
81
"accept": [
82
82
"image/png",
83
83
"image/jpeg",
84
84
"image/webp"
85
85
],
86
86
"maxSize": 1000000,
87
87
"type": "blob"
88
88
},
89
89
"banner": {
90
90
"accept": [
91
91
"image/png",
92
92
"image/jpeg",
93
93
"image/webp"
94
94
],
95
95
"maxSize": 2000000,
96
96
"type": "blob"
97
97
},
98
98
"createdAt": {
99
99
"format": "datetime",
100
100
"type": "string"
101
101
},
102
102
"customCss": {
103
103
"description": "Forum-owned CSS applied to public pages. Admin pages deliberately ignore it so a broken stylesheet can always be repaired.",
104
104
"maxLength": 100000,
105
105
"type": "string"
106
106
},
107
107
"customFonts": {
108
108
"description": "Forum-owned webfont faces available to customCss.",
109
109
"items": {
110
110
"ref": "#font",
111
111
"type": "ref"
112
112
},
113
113
"maxLength": 12,
114
114
"type": "array"
115
115
},
116
116
"description": {
117
117
"maxGraphemes": 1000,
118
118
"maxLength": 10000,
119
119
"type": "string"
120
120
},
121
121
"favicon": {
122
122
"accept": [
123
123
"image/png",
124
124
"image/jpeg",
125
125
"image/webp"
126
126
],
127
127
"description": "Forum-owned browser icon.",
128
128
"maxSize": 1000000,
129
129
"type": "blob"
130
130
},
131
+
"hideCredit": {
132
+
"description": "Hide the 'powered by atmobb' badge in the page footer. Absent means shown.",
133
+
"type": "boolean"
134
+
},
135
+
"hideDefaultStamps": {
136
+
"description": "Hide the board and arrival default stamps on member rails. The 'here since' line always shows. Absent means shown.",
137
+
"type": "boolean"
138
+
},
139
+
"hideProfileSkins": {
140
+
"description": "Show every member profile page in the forum's own colors, ignoring members' profile skins. Banner patterns and headlines still show. Absent means skins show.",
141
+
"type": "boolean"
142
+
},
131
143
"homepage": {
132
144
"description": "Optional forum homepage presentation. Absent values retain the classic board index.",
133
145
"ref": "#homepage",
134
146
"type": "ref"
135
147
},
148
+
"intro": {
149
+
"description": "Rich welcome shown in the home page hero under the description. Absent means the hero shows the name and description only.",
150
+
"items": {
151
+
"refs": [
152
+
"app.atmobb.richtext.block#text",
153
+
"app.atmobb.richtext.block#quote",
154
+
"app.atmobb.richtext.block#code"
155
+
],
156
+
"type": "union"
157
+
},
158
+
"maxLength": 50,
159
+
"type": "array"
160
+
},
136
161
"links": {
137
162
"items": {
138
163
"format": "uri",
139
164
"type": "string"
140
165
},
141
166
"maxLength": 20,
142
167
"type": "array"
143
168
},
169
+
"membership": {
170
+
"description": "How people join. Absent means open: declaring membership is joining.",
171
+
"ref": "#membership",
172
+
"type": "ref"
173
+
},
144
174
"name": {
145
175
"maxGraphemes": 100,
146
176
"maxLength": 1000,
147
177
"type": "string"
148
178
},
149
179
"ogImage": {
150
180
"accept": [
151
181
"image/png"
152
182
],
153
183
"description": "Forum-owned 1200 by 630 PNG used as the forum landing page's social preview image.",
154
184
"maxSize": 2000000,
155
185
"type": "blob"
156
186
},
157
187
"ogTheme": {
158
188
"description": "Visual preset used by the generated forum landing page social preview.",
159
189
"knownValues": [
160
190
"classic",
161
191
"midnight",
162
192
"ocean",
163
193
"forest",
164
194
"plum"
165
195
],
166
196
"maxLength": 32,
167
197
"type": "string"
168
198
},
169
199
"ranks": {
170
-
"description": "Post-count rank ladder, ordered ascending by minPosts. Ranks are computed by appviews from indexed post counts.",
200
+
"description": "Deprecated and no longer rendered: post-count ranks gave way to stamps (app.atmobb.forum.stamp). Kept so older records still validate.",
171
201
"items": {
172
202
"ref": "#rank",
173
203
"type": "ref"
174
204
},
175
205
"maxLength": 50,
176
206
"type": "array"
177
207
},
178
208
"rules": {
179
209
"items": {
180
210
"refs": [
181
211
"app.atmobb.richtext.block#text",
182
212
"app.atmobb.richtext.block#quote",
183
213
"app.atmobb.richtext.block#code"
184
214
],
185
215
"type": "union"
186
216
},
187
217
"maxLength": 50,
188
218
"type": "array"
189
219
},
190
220
"theme": {
191
221
"description": "Built-in color theme preset. Absent means the classic atmobb skin. Custom CSS loads after the preset and may override it.",
192
222
"knownValues": [
193
223
"classic",
194
224
"sky",
195
225
"bubblegum",
196
226
"midnight",
197
227
"forest"
198
228
],
199
229
"maxLength": 32,
200
230
"type": "string"
201
231
}
202
232
},
203
233
"required": [
204
234
"name"
205
235
],
206
236
"type": "object"
207
237
},
208
238
"type": "record"
209
239
},
240
+
"membership": {
241
+
"description": "Join policy for a forum. In the apply and invite modes only accounts the forum has accepted (an acceptMember moderation action) may post; reading stays public.",
242
+
"properties": {
243
+
"gatedSince": {
244
+
"description": "When the forum last entered a gated mode. Posts written while the forum was open are served regardless of membership.",
245
+
"format": "datetime",
246
+
"type": "string"
247
+
},
248
+
"inviteCap": {
249
+
"description": "Open invites an ordinary member may hold at once. 0 means only staff mint invites.",
250
+
"maximum": 100,
251
+
"minimum": 0,
252
+
"type": "integer"
253
+
},
254
+
"inviteDays": {
255
+
"description": "Days before an unredeemed invite expires.",
256
+
"maximum": 365,
257
+
"minimum": 1,
258
+
"type": "integer"
259
+
},
260
+
"mode": {
261
+
"knownValues": [
262
+
"open",
263
+
"apply",
264
+
"invite"
265
+
],
266
+
"maxLength": 32,
267
+
"type": "string"
268
+
},
269
+
"prompt": {
270
+
"description": "The one question shown on the application form in apply mode.",
271
+
"maxGraphemes": 300,
272
+
"maxLength": 3000,
273
+
"type": "string"
274
+
}
275
+
},
276
+
"type": "object"
277
+
},
210
278
"rank": {
211
279
"properties": {
212
280
"minPosts": {
213
281
"minimum": 0,
214
282
"type": "integer"
215
283
},
216
284
"title": {
217
285
"maxGraphemes": 64,
218
286
"maxLength": 640,
219
287
"type": "string"
220
288
}
221
289
},
222
290
"required": [
223
291
"title",
224
292
"minPosts"
225
293
],
226
294
"type": "object"
227
295
}
228
296
},
229
297
"id": "app.atmobb.forum.profile",
230
298
"lexicon": 1
231
299
}