app.atmobb.forum.profile
Schema Diff
+43 -0
Compatibility Analysis
Backward Compatible
Backward compatible. 14 non-breaking changes.
Non-Breaking Changes (14)
- 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.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.membership", kind: "prop", name: Some("membership") }
- 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.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.membership", kind: "prop", name: Some("membership") }
- 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
131
"homepage": {
132
132
"description": "Optional forum homepage presentation. Absent values retain the classic board index.",
133
133
"ref": "#homepage",
134
134
"type": "ref"
135
135
},
136
136
"links": {
137
137
"items": {
138
138
"format": "uri",
139
139
"type": "string"
140
140
},
141
141
"maxLength": 20,
142
142
"type": "array"
143
143
},
144
+
"membership": {
145
+
"description": "How people join. Absent means open: declaring membership is joining.",
146
+
"ref": "#membership",
147
+
"type": "ref"
148
+
},
144
149
"name": {
145
150
"maxGraphemes": 100,
146
151
"maxLength": 1000,
147
152
"type": "string"
148
153
},
149
154
"ogImage": {
150
155
"accept": [
151
156
"image/png"
152
157
],
153
158
"description": "Forum-owned 1200 by 630 PNG used as the forum landing page's social preview image.",
154
159
"maxSize": 2000000,
155
160
"type": "blob"
156
161
},
157
162
"ogTheme": {
158
163
"description": "Visual preset used by the generated forum landing page social preview.",
159
164
"knownValues": [
160
165
"classic",
161
166
"midnight",
162
167
"ocean",
163
168
"forest",
164
169
"plum"
165
170
],
166
171
"maxLength": 32,
167
172
"type": "string"
168
173
},
169
174
"ranks": {
170
175
"description": "Post-count rank ladder, ordered ascending by minPosts. Ranks are computed by appviews from indexed post counts.",
171
176
"items": {
172
177
"ref": "#rank",
173
178
"type": "ref"
174
179
},
175
180
"maxLength": 50,
176
181
"type": "array"
177
182
},
178
183
"rules": {
179
184
"items": {
180
185
"refs": [
181
186
"app.atmobb.richtext.block#text",
182
187
"app.atmobb.richtext.block#quote",
183
188
"app.atmobb.richtext.block#code"
184
189
],
185
190
"type": "union"
186
191
},
187
192
"maxLength": 50,
188
193
"type": "array"
189
194
},
190
195
"theme": {
191
196
"description": "Built-in color theme preset. Absent means the classic atmobb skin. Custom CSS loads after the preset and may override it.",
192
197
"knownValues": [
193
198
"classic",
194
199
"sky",
195
200
"bubblegum",
196
201
"midnight",
197
202
"forest"
198
203
],
199
204
"maxLength": 32,
200
205
"type": "string"
201
206
}
202
207
},
203
208
"required": [
204
209
"name"
205
210
],
206
211
"type": "object"
207
212
},
208
213
"type": "record"
209
214
},
215
+
"membership": {
216
+
"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.",
217
+
"properties": {
218
+
"gatedSince": {
219
+
"description": "When the forum last entered a gated mode. Posts written while the forum was open are served regardless of membership.",
220
+
"format": "datetime",
221
+
"type": "string"
222
+
},
223
+
"inviteCap": {
224
+
"description": "Open invites an ordinary member may hold at once. 0 means only staff mint invites.",
225
+
"maximum": 100,
226
+
"minimum": 0,
227
+
"type": "integer"
228
+
},
229
+
"inviteDays": {
230
+
"description": "Days before an unredeemed invite expires.",
231
+
"maximum": 365,
232
+
"minimum": 1,
233
+
"type": "integer"
234
+
},
235
+
"mode": {
236
+
"knownValues": [
237
+
"open",
238
+
"apply",
239
+
"invite"
240
+
],
241
+
"maxLength": 32,
242
+
"type": "string"
243
+
},
244
+
"prompt": {
245
+
"description": "The one question shown on the application form in apply mode.",
246
+
"maxGraphemes": 300,
247
+
"maxLength": 3000,
248
+
"type": "string"
249
+
}
250
+
},
251
+
"type": "object"
252
+
},
210
253
"rank": {
211
254
"properties": {
212
255
"minPosts": {
213
256
"minimum": 0,
214
257
"type": "integer"
215
258
},
216
259
"title": {
217
260
"maxGraphemes": 64,
218
261
"maxLength": 640,
219
262
"type": "string"
220
263
}
221
264
},
222
265
"required": [
223
266
"title",
224
267
"minPosts"
225
268
],
226
269
"type": "object"
227
270
}
228
271
},
229
272
"id": "app.atmobb.forum.profile",
230
273
"lexicon": 1
231
274
}