com.linxtape.tape
Schema Diff
+4 -14
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 0 non-breaking changes.
Breaking Changes (2)
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "com.linxtape.tape:body", src: "com.linxtape.tape:body", tgt: "com.linxtape.tape:body.kind", kind: "prop", name: Some("kind") }
- RemovedVertex RemovedVertex { vertex_id: "com.linxtape.tape:body.kind" }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "com.linxtape.tape:body.kind" }
Additional Notes
- Breaking: RequiredEdgeRemoved { vertex_id: "com.linxtape.tape:body", src: "com.linxtape.tape:body", tgt: "com.linxtape.tape:body.kind", kind: "prop", name: Some("kind") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"liner": {
5
5
"properties": {
6
6
"note": {
7
7
"maxGraphemes": 280,
8
8
"maxLength": 2800,
9
9
"type": "string"
10
10
},
11
11
"signOff": {
12
12
"maxGraphemes": 60,
13
13
"maxLength": 600,
14
14
"type": "string"
15
15
},
16
16
"tips": {
17
17
"items": {
18
18
"maxGraphemes": 140,
19
19
"maxLength": 1400,
20
20
"type": "string"
21
21
},
22
22
"maxLength": 3,
23
23
"type": "array"
24
24
}
25
25
},
26
26
"type": "object"
27
27
},
28
28
"main": {
29
29
"key": "tid",
30
30
"record": {
31
31
"properties": {
32
32
"afterThey": {
33
-
"description": "Course: what they'll be able to do after.",
33
+
"description": "Optional goal: what they'll get from it.",
34
34
"maxGraphemes": 200,
35
35
"maxLength": 2000,
36
36
"type": "string"
37
37
},
38
38
"createdAt": {
39
39
"format": "datetime",
40
40
"type": "string"
41
41
},
42
42
"forWho": {
43
-
"description": "Course: who it's for.",
43
+
"description": "Optional goal: who it's for.",
44
44
"maxGraphemes": 200,
45
45
"maxLength": 2000,
46
46
"type": "string"
47
47
},
48
-
"kind": {
49
-
"description": "course = ordered and goal-driven; mix = any order.",
50
-
"knownValues": [
51
-
"course",
52
-
"mix"
53
-
],
54
-
"maxLength": 32,
55
-
"type": "string"
56
-
},
57
48
"liner": {
58
49
"ref": "#liner",
59
50
"type": "ref"
60
51
},
61
52
"listed": {
62
53
"description": "true = listed in search. false = link-only: kept out of search, but still public.",
63
54
"type": "boolean"
64
55
},
65
56
"look": {
66
57
"description": "Cassette shell and stripe set.",
67
58
"knownValues": [
68
59
"smoke-sunset",
69
60
"red-mono",
70
61
"blue-ocean",
71
62
"clear-sunset"
72
63
],
73
64
"maxLength": 64,
74
65
"type": "string"
75
66
},
76
67
"oneLiner": {
77
-
"description": "Mix: what this mix is, in one line.",
68
+
"description": "What the tape is about, in one line.",
78
69
"maxGraphemes": 200,
79
70
"maxLength": 2000,
80
71
"type": "string"
81
72
},
82
73
"sides": {
83
74
"items": {
84
75
"ref": "#side",
85
76
"type": "ref"
86
77
},
87
78
"maxLength": 2,
88
79
"minLength": 1,
89
80
"type": "array"
90
81
},
91
82
"title": {
92
83
"maxGraphemes": 100,
93
84
"maxLength": 1000,
94
85
"minLength": 1,
95
86
"type": "string"
96
87
},
97
88
"updatedAt": {
98
89
"format": "datetime",
99
90
"type": "string"
100
91
}
101
92
},
102
93
"required": [
103
-
"kind",
104
94
"title",
105
95
"sides",
106
96
"listed",
107
97
"createdAt"
108
98
],
109
99
"type": "object"
110
100
},
111
101
"type": "record"
112
102
},
113
103
"side": {
114
104
"properties": {
115
105
"letter": {
116
106
"enum": [
117
107
"A",
118
108
"B"
119
109
],
120
110
"type": "string"
121
111
},
122
112
"name": {
123
113
"maxGraphemes": 60,
124
114
"maxLength": 600,
125
115
"type": "string"
126
116
},
127
117
"tracks": {
128
118
"items": {
129
119
"ref": "#track",
130
120
"type": "ref"
131
121
},
132
122
"maxLength": 50,
133
123
"type": "array"
134
124
}
135
125
},
136
126
"required": [
137
127
"letter",
138
128
"tracks"
139
129
],
140
130
"type": "object"
141
131
},
142
132
"track": {
143
133
"properties": {
144
134
"id": {
145
135
"description": "Stable identifier, generated once when the track is added and never reused within the tape.",
146
136
"maxLength": 32,
147
137
"minLength": 1,
148
138
"type": "string"
149
139
},
150
140
"kind": {
151
141
"knownValues": [
152
142
"video",
153
143
"page",
154
144
"pdf"
155
145
],
156
146
"maxLength": 32,
157
147
"type": "string"
158
148
},
159
149
"minutes": {
160
150
"description": "Video duration or estimated reading time, in whole minutes.",
161
151
"maximum": 100000,
162
152
"minimum": 0,
163
153
"type": "integer"
164
154
},
165
155
"note": {
166
156
"description": "The curator's note: why this one.",
167
157
"maxGraphemes": 300,
168
158
"maxLength": 3000,
169
159
"type": "string"
170
160
},
171
161
"pages": {
172
162
"maximum": 100000,
173
163
"minimum": 0,
174
164
"type": "integer"
175
165
},
176
166
"sourceDomain": {
177
167
"maxLength": 253,
178
168
"type": "string"
179
169
},
180
170
"title": {
181
171
"maxGraphemes": 300,
182
172
"maxLength": 3000,
183
173
"type": "string"
184
174
},
185
175
"url": {
186
176
"format": "uri",
187
177
"maxLength": 2048,
188
178
"type": "string"
189
179
}
190
180
},
191
181
"required": [
192
182
"id",
193
183
"url",
194
184
"kind",
195
185
"title",
196
186
"minutes"
197
187
],
198
188
"type": "object"
199
189
}
200
190
},
201
-
"description": "A tape: a curated, public learning path or collection of links. Every track plays on its creator's own site or player.",
191
+
"description": "A tape: a public collection of links around a topic, in order, like a mixtape. Every track plays on its creator's own site or player.",
202
192
"id": "com.linxtape.tape",
203
193
"lexicon": 1
204
194
}