fyi.opensocial.template
Schema Diff
+26 -2
Compatibility Analysis
Backward Compatible
Backward compatible. 12 non-breaking changes.
Non-Breaking Changes (12)
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.site#appview" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.template#entry.appviews" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.template#entry.appviews:items" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.template#entry.network" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.template#entry.network:items" }
- AddedVertex AddedVertex { vertex_id: "fyi.opensocial.template#pick.link" }
- AddedEdge AddedEdge { src: "fyi.opensocial.template#entry", tgt: "fyi.opensocial.template#entry.appviews", kind: "prop", name: Some("appviews") }
- AddedEdge AddedEdge { src: "fyi.opensocial.template#entry", tgt: "fyi.opensocial.template#entry.network", kind: "prop", name: Some("network") }
- AddedEdge AddedEdge { src: "fyi.opensocial.template#entry.appviews", tgt: "fyi.opensocial.template#entry.appviews:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "fyi.opensocial.template#entry.appviews:items", tgt: "fyi.opensocial.site#appview", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "fyi.opensocial.template#entry.network", tgt: "fyi.opensocial.template#entry.network:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "fyi.opensocial.template#pick", tgt: "fyi.opensocial.template#pick.link", kind: "prop", name: Some("link") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "fyi.opensocial.site#appview" }AddedVertex { vertex_id: "fyi.opensocial.template#entry.appviews" }AddedVertex { vertex_id: "fyi.opensocial.template#entry.appviews:items" }AddedVertex { vertex_id: "fyi.opensocial.template#entry.network" }AddedVertex { vertex_id: "fyi.opensocial.template#entry.network:items" }AddedVertex { vertex_id: "fyi.opensocial.template#pick.link" }
Additional Notes
- Non-breaking: AddedEdge { src: "fyi.opensocial.template#entry", tgt: "fyi.opensocial.template#entry.appviews", kind: "prop", name: Some("appviews") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.template#entry", tgt: "fyi.opensocial.template#entry.network", kind: "prop", name: Some("network") }
- Non-breaking: AddedEdge { src: "fyi.opensocial.template#entry.appviews", tgt: "fyi.opensocial.template#entry.appviews:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "fyi.opensocial.template#entry.appviews:items", tgt: "fyi.opensocial.site#appview", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "fyi.opensocial.template#entry.network", tgt: "fyi.opensocial.template#entry.network:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "fyi.opensocial.template#pick", tgt: "fyi.opensocial.template#pick.link", kind: "prop", name: Some("link") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"asGroup": {
5
5
"properties": {
6
6
"collection": {
7
7
"format": "nsid",
8
8
"type": "string"
9
9
},
10
10
"in": {
11
11
"description": "The type of space it goes in.",
12
12
"format": "nsid",
13
13
"type": "string"
14
14
}
15
15
},
16
16
"required": [
17
17
"collection",
18
18
"in"
19
19
],
20
20
"type": "object"
21
21
},
22
22
"entry": {
23
23
"description": "A tab, as the template suggests it, without the template itself.",
24
24
"properties": {
25
+
"appviews": {
26
+
"description": "The app servers it reads for the viewer, by the start of their methods' names. Bluesky's, for app.bsky, needs no naming.",
27
+
"items": {
28
+
"ref": "fyi.opensocial.site#appview",
29
+
"type": "ref"
30
+
},
31
+
"maxLength": 10,
32
+
"type": "array"
33
+
},
25
34
"asGroup": {
26
35
"description": "What it writes as the group rather than as the viewer, and the kind of space each goes in. Who may is up to each space's access record.",
27
36
"items": {
28
37
"ref": "#asGroup",
29
38
"type": "ref"
30
39
},
31
40
"type": "array"
32
41
},
33
42
"calls": {
34
-
"description": "The host methods it may call for the viewer.",
43
+
"description": "The methods it may call for the viewer: the host's, and an app server's, like Bluesky's.",
35
44
"items": {
36
45
"format": "nsid",
37
46
"type": "string"
38
47
},
39
48
"maxLength": 50,
40
49
"type": "array"
41
50
},
42
51
"for": {
43
-
"description": "The kind of thing a tab of it is about, if it is about one: a collection of records in the group's spaces, or a type of space. Such a tab's `about` is one of them.",
52
+
"description": "The kind of thing a tab of it is about, if it is about one: a collection of records in the group's spaces, or a type of space; or, with pick.link, records anywhere on the network. Such a tab's `about` is one of them.",
44
53
"format": "nsid",
45
54
"type": "string"
46
55
},
47
56
"labels": {
48
57
"description": "Its words for what it lets people do, by record kind or method, to follow 'Lets people': 'post events'.",
49
58
"items": {
50
59
"ref": "#label",
51
60
"type": "ref"
52
61
},
53
62
"type": "array"
54
63
},
55
64
"members": {
56
65
"description": "Shown to members only.",
57
66
"type": "boolean"
58
67
},
68
+
"network": {
69
+
"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.",
70
+
"items": {
71
+
"format": "nsid",
72
+
"type": "string"
73
+
},
74
+
"maxLength": 20,
75
+
"type": "array"
76
+
},
59
77
"pick": {
60
78
"description": "With for, how choosing which one is put, and what a tab about none of them shows. Without none, a tab of it must be about one.",
61
79
"ref": "#pick",
62
80
"type": "ref"
63
81
},
64
82
"reads": {
65
83
"description": "The collections it may read from the group, its members and its spaces.",
66
84
"items": {
67
85
"format": "nsid",
68
86
"type": "string"
69
87
},
70
88
"maxLength": 50,
71
89
"type": "array"
72
90
},
73
91
"slug": {
74
92
"maxLength": 64,
75
93
"type": "string"
76
94
},
77
95
"summary": {
78
96
"description": "One short line on what a tab of it shows, for choosing it.",
79
97
"maxGraphemes": 100,
80
98
"maxLength": 1000,
81
99
"type": "string"
82
100
},
83
101
"title": {
84
102
"maxGraphemes": 64,
85
103
"maxLength": 640,
86
104
"type": "string"
87
105
},
88
106
"writes": {
89
107
"description": "The collections it may write for the viewer, in their account or one of the group's spaces.",
90
108
"items": {
91
109
"format": "nsid",
92
110
"type": "string"
93
111
},
94
112
"maxLength": 50,
95
113
"type": "array"
96
114
}
97
115
},
98
116
"required": [
99
117
"slug"
100
118
],
101
119
"type": "object"
102
120
},
103
121
"label": {
104
122
"properties": {
105
123
"action": {
106
124
"description": "For that write alone.",
107
125
"knownValues": [
108
126
"create",
109
127
"update",
110
128
"delete"
111
129
],
112
130
"type": "string"
113
131
},
114
132
"nsid": {
115
133
"description": "A record kind it writes, or a method it calls.",
116
134
"format": "nsid",
117
135
"type": "string"
118
136
},
119
137
"text": {
120
138
"maxGraphemes": 80,
121
139
"maxLength": 300,
122
140
"type": "string"
123
141
}
124
142
},
125
143
"required": [
126
144
"nsid",
127
145
"text"
128
146
],
129
147
"type": "object"
130
148
},
131
149
"main": {
132
150
"description": "A template for a tab for a group's site, published by whoever made it. A site names it by URI; an agent installs it as a skill. Keyed by the template's name.",
133
151
"key": "any",
134
152
"record": {
135
153
"properties": {
136
154
"createdAt": {
137
155
"format": "datetime",
138
156
"type": "string"
139
157
},
140
158
"description": {
141
159
"description": "One line saying what it is and when to use it; what an agent matches a request against.",
142
160
"maxGraphemes": 300,
143
161
"maxLength": 3000,
144
162
"type": "string"
145
163
},
146
164
"entry": {
147
165
"description": "How a site uses it unless told otherwise; what it reads, writes and calls are what it needs to be allowed for it to work.",
148
166
"ref": "#entry",
149
167
"type": "ref"
150
168
},
151
169
"guide": {
152
170
"description": "How to use it, in markdown: what it shows, what it reads and who can see that, how to make it a group's own.",
153
171
"maxLength": 50000,
154
172
"type": "string"
155
173
},
156
174
"html": {
157
175
"description": "The page: a whole HTML document, drawn in a sandboxed frame with the site kit in front of it.",
158
176
"maxLength": 200000,
159
177
"type": "string"
160
178
},
161
179
"name": {
162
180
"description": "What a site and an agent call it: lowercase letters, digits and dashes. The same as the record key.",
163
181
"maxLength": 64,
164
182
"type": "string"
165
183
},
166
184
"preview": {
167
185
"description": "A small drawing of a tab of it, as SVG, for choosing it: drawn in the site's colours by the tokens var(--bg), var(--ink), var(--muted), var(--line), var(--accent), var(--surface) and var(--soft). Shown as an image, so nothing in it runs.",
168
186
"maxLength": 20000,
169
187
"type": "string"
170
188
}
171
189
},
172
190
"required": [
173
191
"name",
174
192
"description",
175
193
"guide",
176
194
"html",
177
195
"createdAt"
178
196
],
179
197
"type": "object"
180
198
},
181
199
"type": "record"
182
200
},
183
201
"pick": {
184
202
"properties": {
185
203
"label": {
186
204
"maxGraphemes": 64,
187
205
"maxLength": 640,
188
206
"type": "string"
189
207
},
208
+
"link": {
209
+
"description": "Picked by pasting a link to one, anywhere on the network, rather than from the group's own: a Bluesky feed's. The field's hint.",
210
+
"maxGraphemes": 64,
211
+
"maxLength": 640,
212
+
"type": "string"
213
+
},
190
214
"new": {
191
215
"description": "Making a new place of its own instead, from Add a tab: a space of this type, readable by everyone or some roles.",
192
216
"ref": "#pickNew",
193
217
"type": "ref"
194
218
},
195
219
"none": {
196
220
"maxGraphemes": 64,
197
221
"maxLength": 640,
198
222
"type": "string"
199
223
}
200
224
},
201
225
"required": [
202
226
"label"
203
227
],
204
228
"type": "object"
205
229
},
206
230
"pickNew": {
207
231
"properties": {
208
232
"in": {
209
233
"description": "The type of space to make.",
210
234
"format": "nsid",
211
235
"type": "string"
212
236
},
213
237
"label": {
214
238
"maxGraphemes": 60,
215
239
"maxLength": 300,
216
240
"type": "string"
217
241
}
218
242
},
219
243
"required": [
220
244
"label",
221
245
"in"
222
246
],
223
247
"type": "object"
224
248
}
225
249
},
226
250
"id": "fyi.opensocial.template",
227
251
"lexicon": 1
228
252
}