to.atpota.poe.overlay
Schema Diff
+40 -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\"]", 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\"]", 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
-
"pulse"
127
+
"pulse",
128
+
"moon",
129
+
"mark",
130
+
"loader",
131
+
"tid",
132
+
"flushes",
133
+
"status",
134
+
"music",
135
+
"chat"
121
136
],
122
137
"type": "string"
123
138
},
124
139
"scale": {
125
140
"description": "Percent of its usual size.",
126
141
"maximum": 200,
127
142
"minimum": 50,
128
143
"type": "integer"
129
144
},
130
145
"slot": {
131
146
"description": "Where on screen. Widgets in the same slot stack.",
132
147
"knownValues": [
133
148
"top-left",
134
149
"top-center",
135
150
"top-right",
136
151
"bottom-left",
137
152
"bottom-center",
138
153
"bottom-right"
139
154
],
140
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"
141
176
}
142
177
},
143
178
"required": [
144
179
"kind",
145
180
"slot",
146
181
"scale"
147
182
],
148
183
"type": "object"
149
184
}
150
185
},
151
-
"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.",
152
187
"id": "to.atpota.poe.overlay",
153
188
"lexicon": 1
154
189
}