fyi.opensocial.site
Schema Diff
+43 -1
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 14 non-breaking changes.
Breaking Changes (2)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "fyi.opensocial.site#appview", src: "fyi.opensocial.site#appview", tgt: "fyi.opensocial.site#appview.service", kind: "prop", name: Some("service") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "fyi.opensocial.site#appview", src: "fyi.opensocial.site#appview", tgt: "fyi.opensocial.site#appview.prefix", kind: "prop", name: Some("prefix") }
Non-Breaking Changes (14)
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#appview" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#appview.prefix" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#appview.service" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#channel.front" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#tab.appviews" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#tab.appviews:items" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#tab.network" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#tab.network:items" }
- AddedEdge AddedEdge { src: "fyi.opensocial.site#channel", tgt: "fyi.opensocial.site#channel.front", kind: "prop", name: Some("front") }
- AddedEdge AddedEdge { src: "fyi.opensocial.site#tab", tgt: "fyi.opensocial.site#tab.appviews", kind: "prop", name: Some("appviews") }
- AddedEdge AddedEdge { src: "fyi.opensocial.site#tab", tgt: "fyi.opensocial.site#tab.network", kind: "prop", name: Some("network") }
- AddedEdge AddedEdge { src: "fyi.opensocial.site#tab.appviews", tgt: "fyi.opensocial.site#tab.appviews:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "fyi.opensocial.site#tab.appviews:items", tgt: "fyi.opensocial.site#appview", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "fyi.opensocial.site#tab.network", tgt: "fyi.opensocial.site#tab.network:items", kind: "items", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "fyi.opensocial.site#appview" }AddedVertex { vertex_id: "fyi.opensocial.site#appview.prefix" }AddedVertex { vertex_id: "fyi.opensocial.site#appview.service" }AddedVertex { vertex_id: "fyi.opensocial.site#channel.front" }AddedVertex { vertex_id: "fyi.opensocial.site#tab.appviews" }AddedVertex { vertex_id: "fyi.opensocial.site#tab.appviews:items" }AddedVertex { vertex_id: "fyi.opensocial.site#tab.network" }AddedVertex { vertex_id: "fyi.opensocial.site#tab.network:items" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "fyi.opensocial.site#appview", src: "fyi.opensocial.site#appview", tgt: "fyi.opensocial.site#appview.service", kind: "prop", name: Some("service") }
- Breaking: RequiredEdgeAdded { vertex_id: "fyi.opensocial.site#appview", src: "fyi.opensocial.site#appview", tgt: "fyi.opensocial.site#appview.prefix", kind: "prop", name: Some("prefix") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.site#channel", tgt: "fyi.opensocial.site#channel.front", kind: "prop", name: Some("front") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.site#tab", tgt: "fyi.opensocial.site#tab.appviews", kind: "prop", name: Some("appviews") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.site#tab", tgt: "fyi.opensocial.site#tab.network", kind: "prop", name: Some("network") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.site#tab.appviews", tgt: "fyi.opensocial.site#tab.appviews:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "fyi.opensocial.site#tab.appviews:items", tgt: "fyi.opensocial.site#appview", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "fyi.opensocial.site#tab.network", tgt: "fyi.opensocial.site#tab.network:items", kind: "items", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
+
"appview": {
5
+
"description": "An app server a tab reads for the viewer: what its methods' names start with, and the service, by DID and id.",
6
+
"properties": {
7
+
"prefix": {
8
+
"description": "social.grain",
9
+
"maxLength": 253,
10
+
"type": "string"
11
+
},
12
+
"service": {
13
+
"description": "did:web:grain.social#grain_appview",
14
+
"maxLength": 2048,
15
+
"type": "string"
16
+
}
17
+
},
18
+
"required": [
19
+
"prefix",
20
+
"service"
21
+
],
22
+
"type": "object"
23
+
},
4
24
"channel": {
5
25
"properties": {
26
+
"front": {
27
+
"description": "The site's front page, drawn across the whole window with nothing around it, at every path at the group's address but the channels' (/c/<channel>/<tab>). Members land in the channels at the address itself, and see it at any other of its paths. One tab at most, and one anyone may see.",
28
+
"type": "boolean"
29
+
},
6
30
"members": {
7
31
"description": "Shown to members only.",
8
32
"type": "boolean"
9
33
},
10
34
"name": {
11
35
"maxGraphemes": 64,
12
36
"maxLength": 640,
13
37
"type": "string"
14
38
},
15
39
"roles": {
16
40
"description": "Shown only to members with one of these roles, by the group's role ids: a channel for those who run part of the group. Implies members.",
17
41
"items": {
18
42
"maxLength": 128,
19
43
"type": "string"
20
44
},
21
45
"maxLength": 20,
22
46
"type": "array"
23
47
},
24
48
"slug": {
25
49
"description": "Lowercase letters, digits and dashes; its address within the site.",
26
50
"maxLength": 64,
27
51
"type": "string"
28
52
},
29
53
"tabs": {
30
54
"items": {
31
55
"ref": "#tab",
32
56
"type": "ref"
33
57
},
34
58
"maxLength": 50,
35
59
"type": "array"
36
60
}
37
61
},
38
62
"required": [
39
63
"slug",
40
64
"tabs"
41
65
],
42
66
"type": "object"
43
67
},
44
68
"file": {
45
69
"properties": {
46
70
"file": {
47
71
"maxSize": 5000000,
48
72
"type": "blob"
49
73
},
50
74
"path": {
51
75
"maxLength": 512,
52
76
"type": "string"
53
77
}
54
78
},
55
79
"required": [
56
80
"path",
57
81
"file"
58
82
],
59
83
"type": "object"
60
84
},
61
85
"main": {
62
86
"description": "A group's site, in its members space: channels of tabs, shown one at a time, each a whole HTML document drawn in a sandboxed frame. Authored by the group DID; written through putSite by whoever holds group.configure. Anyone else is handed only its public part, by the host. A group without one is shown the starter.",
63
87
"key": "literal:self",
64
88
"record": {
65
89
"properties": {
66
90
"channels": {
67
91
"items": {
68
92
"ref": "#channel",
69
93
"type": "ref"
70
94
},
71
95
"maxLength": 50,
72
96
"type": "array"
73
97
},
74
98
"files": {
75
99
"description": "Everything the site is made of, by path. A tab's page is `<channel>/<tab>.html`, or `<channel>/<tab>/index.html` with what it uses beside it; `site.css` is put in front of every tab.",
76
100
"items": {
77
101
"ref": "#file",
78
102
"type": "ref"
79
103
},
80
104
"maxLength": 500,
81
105
"type": "array"
82
106
},
83
107
"theme": {
84
108
"ref": "#theme",
85
109
"type": "ref"
86
110
},
87
111
"updatedAt": {
88
112
"format": "datetime",
89
113
"type": "string"
90
114
}
91
115
},
92
116
"required": [
93
117
"channels",
94
118
"files",
95
119
"updatedAt"
96
120
],
97
121
"type": "object"
98
122
},
99
123
"type": "record"
100
124
},
101
125
"tab": {
102
126
"properties": {
103
127
"about": {
104
128
"description": "The one thing it is for, which its page shows: an event's or a chat room's URI in one of the group's spaces, a board's space, or a member's DID. Its tab comes and goes with it.",
105
129
"maxLength": 512,
106
130
"type": "string"
107
131
},
132
+
"appviews": {
133
+
"description": "The app servers it reads for the viewer, by the start of their methods' names. Bluesky's, for app.bsky, needs no naming.",
134
+
"items": {
135
+
"ref": "fyi.opensocial.site#appview",
136
+
"type": "ref"
137
+
},
138
+
"maxLength": 10,
139
+
"type": "array"
140
+
},
108
141
"asGroup": {
109
142
"description": "What it writes as the group rather than as the viewer, and the kind of space each goes in.",
110
143
"items": {
111
144
"ref": "fyi.opensocial.template#asGroup",
112
145
"type": "ref"
113
146
},
114
147
"type": "array"
115
148
},
116
149
"calls": {
117
-
"description": "The host methods it may call for the viewer.",
150
+
"description": "The methods it may call for the viewer: the host's, and an app server's, like Bluesky's.",
118
151
"items": {
119
152
"format": "nsid",
120
153
"type": "string"
121
154
},
122
155
"maxLength": 50,
123
156
"type": "array"
124
157
},
125
158
"cid": {
126
159
"description": "With a template URI: that version only.",
127
160
"format": "cid",
128
161
"type": "string"
129
162
},
130
163
"labels": {
131
164
"description": "Its words for what it lets people do, by record kind or method.",
132
165
"items": {
133
166
"ref": "fyi.opensocial.template#label",
134
167
"type": "ref"
135
168
},
136
169
"type": "array"
137
170
},
138
171
"members": {
139
172
"description": "Shown to members only.",
140
173
"type": "boolean"
141
174
},
175
+
"network": {
176
+
"description": "Collections it reads from everyone on the network who writes them, not only the group and its members: the host keeps each one whole from when the site is saved, and won't save one more accounts write than it can keep.",
177
+
"items": {
178
+
"format": "nsid",
179
+
"type": "string"
180
+
},
181
+
"maxLength": 20,
182
+
"type": "array"
183
+
},
142
184
"page": {
143
185
"description": "One of the site's files to show, which tabs alike share (every event's tab, say). Read before the tab's own file and its template.",
144
186
"maxLength": 256,
145
187
"type": "string"
146
188
},
147
189
"reads": {
148
190
"description": "The collections it may read from the group, its members and its spaces.",
149
191
"items": {
150
192
"format": "nsid",
151
193
"type": "string"
152
194
},
153
195
"maxLength": 50,
154
196
"type": "array"
155
197
},
156
198
"roles": {
157
199
"description": "For members with one of these roles, by the group's role ids. Others don't see it, or its tab. Members only.",
158
200
"items": {
159
201
"maxLength": 64,
160
202
"type": "string"
161
203
},
162
204
"maxLength": 20,
163
205
"type": "array"
164
206
},
165
207
"slug": {
166
208
"maxLength": 64,
167
209
"type": "string"
168
210
},
169
211
"template": {
170
212
"description": "Drawn from a template when the site has no page of its own for it: a bundled one by name, a fyi.opensocial.template by URI, or a member's fyi.opensocial.page by its URI in the group's space for members' work. A member's page is only ever drawn for members.",
171
213
"maxLength": 512,
172
214
"type": "string"
173
215
},
174
216
"title": {
175
217
"maxGraphemes": 64,
176
218
"maxLength": 640,
177
219
"type": "string"
178
220
},
179
221
"writes": {
180
222
"description": "The collections it may write for the viewer, in their account or one of the group's spaces.",
181
223
"items": {
182
224
"format": "nsid",
183
225
"type": "string"
184
226
},
185
227
"maxLength": 50,
186
228
"type": "array"
187
229
}
188
230
},
189
231
"required": [
190
232
"slug"
191
233
],
192
234
"type": "object"
193
235
},
194
236
"theme": {
195
237
"description": "Colours, fonts and corners as CSS values, and what sits behind the tabs.",
196
238
"properties": {
197
239
"accent": {
198
240
"maxLength": 200,
199
241
"type": "string"
200
242
},
201
243
"accentInk": {
202
244
"maxLength": 200,
203
245
"type": "string"
204
246
},
205
247
"bg": {
206
248
"maxLength": 200,
207
249
"type": "string"
208
250
},
209
251
"fontBody": {
210
252
"maxLength": 200,
211
253
"type": "string"
212
254
},
213
255
"fontDisplay": {
214
256
"maxLength": 200,
215
257
"type": "string"
216
258
},
217
259
"ink": {
218
260
"maxLength": 200,
219
261
"type": "string"
220
262
},
221
263
"line": {
222
264
"maxLength": 200,
223
265
"type": "string"
224
266
},
225
267
"muted": {
226
268
"maxLength": 200,
227
269
"type": "string"
228
270
},
229
271
"radius": {
230
272
"maxLength": 200,
231
273
"type": "string"
232
274
},
233
275
"surface": {
234
276
"maxLength": 200,
235
277
"type": "string"
236
278
},
237
279
"wallpaper": {
238
280
"description": "A built-in wallpaper by name, `banner` for the group's banner, or the path of an image in the site's files.",
239
281
"maxLength": 512,
240
282
"type": "string"
241
283
}
242
284
},
243
285
"type": "object"
244
286
}
245
287
},
246
288
"id": "fyi.opensocial.site",
247
289
"lexicon": 1
248
290
}