to.atpota.poe.overlay
Schema Diff
+37 -5
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 4 non-breaking changes.
Breaking Changes (1)
- ConstraintTightened ConstraintTightened { vertex_id: "to.atpota.poe.overlay#widget.kind", sort: "knownValues", old_value: "[\"card\",\"strip\",\"badge\",\"apps\",\"forecast\",\"pulse\",\"moon\",\"mark\",\"loader\"]", new_value: "[\"card\",\"strip\",\"badge\",\"apps\",\"forecast\",\"pulse\",\"moon\",\"mark\",\"loader\",\"tid\",\"flushes\",\"status\",\"music\",\"chat\"]" }
Non-Breaking Changes (4)
- AddedVertex AddedVertex { vertex_id: "to.atpota.poe.overlay#widget.style" }
- AddedVertex AddedVertex { vertex_id: "to.atpota.poe.overlay:body.name" }
- AddedEdge AddedEdge { src: "to.atpota.poe.overlay#widget", tgt: "to.atpota.poe.overlay#widget.style", kind: "prop", name: Some("style") }
- AddedEdge AddedEdge { src: "to.atpota.poe.overlay:body", tgt: "to.atpota.poe.overlay:body.name", kind: "prop", name: Some("name") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "to.atpota.poe.overlay#widget.style" }AddedVertex { vertex_id: "to.atpota.poe.overlay:body.name" }
Constraint Changes
- ConstraintTightened ConstraintTightened { vertex_id: "to.atpota.poe.overlay#widget.kind", sort: "knownValues", old_value: "[\"card\",\"strip\",\"badge\",\"apps\",\"forecast\",\"pulse\",\"moon\",\"mark\",\"loader\"]", new_value: "[\"card\",\"strip\",\"badge\",\"apps\",\"forecast\",\"pulse\",\"moon\",\"mark\",\"loader\",\"tid\",\"flushes\",\"status\",\"music\",\"chat\"]" }
Additional Notes
- Non-breaking: AddedEdge { src: "to.atpota.poe.overlay#widget", tgt: "to.atpota.poe.overlay#widget.style", kind: "prop", name: Some("style") }
- Non-breaking: AddedEdge { src: "to.atpota.poe.overlay:body", tgt: "to.atpota.poe.overlay:body.name", kind: "prop", name: Some("name") }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
-
"key": "literal:self",
5
+
"key": "any",
6
6
"record": {
7
7
"properties": {
8
8
"alerts": {
9
9
"description": "Poe says weather alerts (storms, apps blowing in).",
10
10
"type": "boolean"
11
11
},
12
12
"chat": {
13
13
"description": "Poe says hello to chatters and answers chat commands.",
14
14
"type": "boolean"
15
15
},
16
16
"createdAt": {
17
17
"format": "datetime",
18
18
"type": "string"
19
19
},
20
20
"follows": {
21
21
"description": "Poe thanks new followers.",
22
22
"type": "boolean"
23
23
},
24
24
"ignore": {
25
25
"description": "Accounts Poe never greets, thanks or answers (bots).",
26
26
"items": {
27
27
"format": "at-identifier",
28
28
"type": "string"
29
29
},
30
30
"maxLength": 50,
31
31
"type": "array"
32
32
},
33
+
"name": {
34
+
"description": "What the streamer calls this layout, on the setup page only.",
35
+
"maxGraphemes": 40,
36
+
"maxLength": 400,
37
+
"type": "string"
38
+
},
33
39
"nap": {
34
40
"description": "Minutes of quiet before Poe naps; 0 never.",
35
41
"maximum": 240,
36
42
"minimum": 0,
37
43
"type": "integer"
38
44
},
39
45
"poe": {
40
46
"ref": "#poe",
41
47
"type": "ref"
42
48
},
43
49
"theme": {
44
50
"knownValues": [
45
51
"light",
46
52
"dark"
47
53
],
48
54
"type": "string"
49
55
},
50
56
"updatedAt": {
51
57
"format": "datetime",
52
58
"type": "string"
53
59
},
54
60
"visitors": {
55
61
"description": "Now and then a butterfly, bird, snail, worm or moth visits Poe.",
56
62
"type": "boolean"
57
63
},
58
64
"volume": {
59
65
"description": "How loud Poe's noises are; 0 is silent.",
60
66
"maximum": 100,
61
67
"minimum": 0,
62
68
"type": "integer"
63
69
},
64
70
"widgets": {
65
-
"description": "The weather widgets on screen, each kind at most once.",
71
+
"description": "The widgets on screen, each kind at most once.",
66
72
"items": {
67
73
"ref": "#widget",
68
74
"type": "ref"
69
75
},
70
-
"maxLength": 12,
76
+
"maxLength": 16,
71
77
"type": "array"
72
78
}
73
79
},
74
80
"required": [
75
81
"poe",
76
82
"widgets",
77
83
"createdAt",
78
84
"updatedAt"
79
85
],
80
86
"type": "object"
81
87
},
82
88
"type": "record"
83
89
},
84
90
"poe": {
85
91
"properties": {
86
92
"scale": {
87
93
"description": "Percent of its usual size.",
88
94
"maximum": 200,
89
95
"minimum": 50,
90
96
"type": "integer"
91
97
},
92
98
"show": {
93
99
"type": "boolean"
94
100
},
95
101
"side": {
96
102
"description": "Which bottom corner Poe sits in; it faces into the screen.",
97
103
"knownValues": [
98
104
"left",
99
105
"right"
100
106
],
101
107
"type": "string"
102
108
}
103
109
},
104
110
"required": [
105
111
"show",
106
112
"side",
107
113
"scale"
108
114
],
109
115
"type": "object"
110
116
},
111
117
"widget": {
112
118
"properties": {
113
119
"kind": {
120
+
"description": "The atmosphere's weather (card to pulse), Anisota's moon, mark and loader, the time as a TID, the streamer's flushes (im.flushing.right.now), status and vitals (is.dame.now, is.dame.state) and teal.fm music, or their stream.place chat.",
114
121
"knownValues": [
115
122
"card",
116
123
"strip",
117
124
"badge",
118
125
"apps",
119
126
"forecast",
120
127
"pulse",
121
128
"moon",
122
129
"mark",
123
-
"loader"
130
+
"loader",
131
+
"tid",
132
+
"flushes",
133
+
"status",
134
+
"music",
135
+
"chat"
124
136
],
125
137
"type": "string"
126
138
},
127
139
"scale": {
128
140
"description": "Percent of its usual size.",
129
141
"maximum": 200,
130
142
"minimum": 50,
131
143
"type": "integer"
132
144
},
133
145
"slot": {
134
146
"description": "Where on screen. Widgets in the same slot stack.",
135
147
"knownValues": [
136
148
"top-left",
137
149
"top-center",
138
150
"top-right",
139
151
"bottom-left",
140
152
"bottom-center",
141
153
"bottom-right"
142
154
],
143
155
"type": "string"
156
+
},
157
+
"style": {
158
+
"description": "How the widget looks, for the kinds with more than one way: tid (ticking, mini), flushes (count, stats, latest), status (both, status, vitals), music (now, history, stats, mini), chat (corner, side, pop). Absent or unknown is the kind's first.",
159
+
"knownValues": [
160
+
"ticking",
161
+
"mini",
162
+
"count",
163
+
"stats",
164
+
"latest",
165
+
"both",
166
+
"status",
167
+
"vitals",
168
+
"now",
169
+
"history",
170
+
"corner",
171
+
"side",
172
+
"pop"
173
+
],
174
+
"maxLength": 32,
175
+
"type": "string"
144
176
}
145
177
},
146
178
"required": [
147
179
"kind",
148
180
"slot",
149
181
"scale"
150
182
],
151
183
"type": "object"
152
184
}
153
185
},
154
-
"description": "How you've set up Poe's stream overlay (atpota.to/overlay): which weather widgets show, where and how big, which side Poe sits on, and what it reacts to. One record per account, at the record key \"self\". The overlay reads it from your repo and follows changes live, so a stream's overlay changes as soon as you save.",
186
+
"description": "How you've set up Poe's stream overlay (atpota.to/overlay): which weather widgets show, where and how big, which side Poe sits on, and what it reacts to. One record per layout: \"self\" is the main one (atpota.to/overlay?streamer=<handle>), and any others are at their own record key, their id in the URL (&layout=<id>; lowercase letters, digits and dashes). The overlay reads it from your repo and follows changes live, so a stream's overlay changes as soon as you save.",
155
187
"id": "to.atpota.poe.overlay",
156
188
"lexicon": 1
157
189
}