fyi.opensocial.template
Schema Diff
+17 -2
Compatibility Analysis
Backward Compatible
Backward compatible. 8 non-breaking changes.
Non-Breaking Changes (8)
- 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#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.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#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#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.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#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
},
59
68
"pick": {
60
69
"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
70
"ref": "#pick",
62
71
"type": "ref"
63
72
},
64
73
"reads": {
65
74
"description": "The collections it may read from the group, its members and its spaces.",
66
75
"items": {
67
76
"format": "nsid",
68
77
"type": "string"
69
78
},
70
79
"maxLength": 50,
71
80
"type": "array"
72
81
},
73
82
"slug": {
74
83
"maxLength": 64,
75
84
"type": "string"
76
85
},
77
86
"summary": {
78
87
"description": "One short line on what a tab of it shows, for choosing it.",
79
88
"maxGraphemes": 100,
80
89
"maxLength": 1000,
81
90
"type": "string"
82
91
},
83
92
"title": {
84
93
"maxGraphemes": 64,
85
94
"maxLength": 640,
86
95
"type": "string"
87
96
},
88
97
"writes": {
89
98
"description": "The collections it may write for the viewer, in their account or one of the group's spaces.",
90
99
"items": {
91
100
"format": "nsid",
92
101
"type": "string"
93
102
},
94
103
"maxLength": 50,
95
104
"type": "array"
96
105
}
97
106
},
98
107
"required": [
99
108
"slug"
100
109
],
101
110
"type": "object"
102
111
},
103
112
"label": {
104
113
"properties": {
105
114
"action": {
106
115
"description": "For that write alone.",
107
116
"knownValues": [
108
117
"create",
109
118
"update",
110
119
"delete"
111
120
],
112
121
"type": "string"
113
122
},
114
123
"nsid": {
115
124
"description": "A record kind it writes, or a method it calls.",
116
125
"format": "nsid",
117
126
"type": "string"
118
127
},
119
128
"text": {
120
129
"maxGraphemes": 80,
121
130
"maxLength": 300,
122
131
"type": "string"
123
132
}
124
133
},
125
134
"required": [
126
135
"nsid",
127
136
"text"
128
137
],
129
138
"type": "object"
130
139
},
131
140
"main": {
132
141
"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
142
"key": "any",
134
143
"record": {
135
144
"properties": {
136
145
"createdAt": {
137
146
"format": "datetime",
138
147
"type": "string"
139
148
},
140
149
"description": {
141
150
"description": "One line saying what it is and when to use it; what an agent matches a request against.",
142
151
"maxGraphemes": 300,
143
152
"maxLength": 3000,
144
153
"type": "string"
145
154
},
146
155
"entry": {
147
156
"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
157
"ref": "#entry",
149
158
"type": "ref"
150
159
},
151
160
"guide": {
152
161
"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
162
"maxLength": 50000,
154
163
"type": "string"
155
164
},
156
165
"html": {
157
166
"description": "The page: a whole HTML document, drawn in a sandboxed frame with the site kit in front of it.",
158
167
"maxLength": 200000,
159
168
"type": "string"
160
169
},
161
170
"name": {
162
171
"description": "What a site and an agent call it: lowercase letters, digits and dashes. The same as the record key.",
163
172
"maxLength": 64,
164
173
"type": "string"
165
174
},
166
175
"preview": {
167
176
"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
177
"maxLength": 20000,
169
178
"type": "string"
170
179
}
171
180
},
172
181
"required": [
173
182
"name",
174
183
"description",
175
184
"guide",
176
185
"html",
177
186
"createdAt"
178
187
],
179
188
"type": "object"
180
189
},
181
190
"type": "record"
182
191
},
183
192
"pick": {
184
193
"properties": {
185
194
"label": {
186
195
"maxGraphemes": 64,
187
196
"maxLength": 640,
188
197
"type": "string"
189
198
},
199
+
"link": {
200
+
"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.",
201
+
"maxGraphemes": 64,
202
+
"maxLength": 640,
203
+
"type": "string"
204
+
},
190
205
"new": {
191
206
"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
207
"ref": "#pickNew",
193
208
"type": "ref"
194
209
},
195
210
"none": {
196
211
"maxGraphemes": 64,
197
212
"maxLength": 640,
198
213
"type": "string"
199
214
}
200
215
},
201
216
"required": [
202
217
"label"
203
218
],
204
219
"type": "object"
205
220
},
206
221
"pickNew": {
207
222
"properties": {
208
223
"in": {
209
224
"description": "The type of space to make.",
210
225
"format": "nsid",
211
226
"type": "string"
212
227
},
213
228
"label": {
214
229
"maxGraphemes": 60,
215
230
"maxLength": 300,
216
231
"type": "string"
217
232
}
218
233
},
219
234
"required": [
220
235
"label",
221
236
"in"
222
237
],
223
238
"type": "object"
224
239
}
225
240
},
226
241
"id": "fyi.opensocial.template",
227
242
"lexicon": 1
228
243
}