app.atmobb.actor.profile
Schema Diff
+110 -1
Compatibility Analysis
Breaking Changes Detected
5 breaking changes, 51 non-breaking changes.
Breaking Changes (5)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#avatarBuilder", src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.skin", kind: "prop", name: Some("skin") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#avatarBuilder", src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.v", kind: "prop", name: Some("v") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#garment", src: "app.atmobb.actor.profile#garment", tgt: "app.atmobb.actor.profile#garment.color", kind: "prop", name: Some("color") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#garment", src: "app.atmobb.actor.profile#garment", tgt: "app.atmobb.actor.profile#garment.type", kind: "prop", name: Some("type") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#part", src: "app.atmobb.actor.profile#part", tgt: "app.atmobb.actor.profile#part.shape", kind: "prop", name: Some("shape") }
Non-Breaking Changes (51)
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.accessory" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.eyebrows" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.eyes" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.facialFeature" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.facialHair" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.hairBack" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.hairFront" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.hat" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.mouth" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.neckwear" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.nose" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.skin" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.top" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.v" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#garment" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#garment.color" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#garment.type" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#part" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#part.color" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile#part.shape" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile:body.avatarBuilder" }
- AddedVertex AddedVertex { vertex_id: "app.atmobb.actor.profile:body.description" }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.accessory", kind: "prop", name: Some("accessory") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.eyebrows", kind: "prop", name: Some("eyebrows") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.eyes", kind: "prop", name: Some("eyes") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.facialFeature", kind: "prop", name: Some("facialFeature") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.facialHair", kind: "prop", name: Some("facialHair") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.hairBack", kind: "prop", name: Some("hairBack") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.hairFront", kind: "prop", name: Some("hairFront") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.hat", kind: "prop", name: Some("hat") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.mouth", kind: "prop", name: Some("mouth") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.neckwear", kind: "prop", name: Some("neckwear") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.nose", kind: "prop", name: Some("nose") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.top", kind: "prop", name: Some("top") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.accessory", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.eyebrows", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.eyes", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.facialFeature", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.facialHair", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.hairBack", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.hairFront", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.hat", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.mouth", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.neckwear", tgt: "app.atmobb.actor.profile#garment", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.nose", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.top", tgt: "app.atmobb.actor.profile#garment", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile#part", tgt: "app.atmobb.actor.profile#part.color", kind: "prop", name: Some("color") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile:body", tgt: "app.atmobb.actor.profile:body.avatarBuilder", kind: "prop", name: Some("avatarBuilder") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile:body", tgt: "app.atmobb.actor.profile:body.description", kind: "prop", name: Some("description") }
- AddedEdge AddedEdge { src: "app.atmobb.actor.profile:body.avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder" }AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.accessory" }AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.eyebrows" }AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.eyes" }AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.facialFeature" }AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.facialHair" }AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.hairBack" }AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.hairFront" }AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.hat" }AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.mouth" }AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.neckwear" }AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.nose" }AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.skin" }AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.top" }AddedVertex { vertex_id: "app.atmobb.actor.profile#avatarBuilder.v" }AddedVertex { vertex_id: "app.atmobb.actor.profile#garment" }AddedVertex { vertex_id: "app.atmobb.actor.profile#garment.color" }AddedVertex { vertex_id: "app.atmobb.actor.profile#garment.type" }AddedVertex { vertex_id: "app.atmobb.actor.profile#part" }AddedVertex { vertex_id: "app.atmobb.actor.profile#part.color" }AddedVertex { vertex_id: "app.atmobb.actor.profile#part.shape" }AddedVertex { vertex_id: "app.atmobb.actor.profile:body.avatarBuilder" }AddedVertex { vertex_id: "app.atmobb.actor.profile:body.description" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#garment", src: "app.atmobb.actor.profile#garment", tgt: "app.atmobb.actor.profile#garment.color", kind: "prop", name: Some("color") }
- Breaking: RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#garment", src: "app.atmobb.actor.profile#garment", tgt: "app.atmobb.actor.profile#garment.type", kind: "prop", name: Some("type") }
- Breaking: RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#part", src: "app.atmobb.actor.profile#part", tgt: "app.atmobb.actor.profile#part.shape", kind: "prop", name: Some("shape") }
- Breaking: RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#avatarBuilder", src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.skin", kind: "prop", name: Some("skin") }
- Breaking: RequiredEdgeAdded { vertex_id: "app.atmobb.actor.profile#avatarBuilder", src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.v", kind: "prop", name: Some("v") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.accessory", kind: "prop", name: Some("accessory") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.eyebrows", kind: "prop", name: Some("eyebrows") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.eyes", kind: "prop", name: Some("eyes") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.facialFeature", kind: "prop", name: Some("facialFeature") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.facialHair", kind: "prop", name: Some("facialHair") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.hairBack", kind: "prop", name: Some("hairBack") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.hairFront", kind: "prop", name: Some("hairFront") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.hat", kind: "prop", name: Some("hat") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.mouth", kind: "prop", name: Some("mouth") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.neckwear", kind: "prop", name: Some("neckwear") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.nose", kind: "prop", name: Some("nose") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder.top", kind: "prop", name: Some("top") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.accessory", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.eyebrows", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.eyes", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.facialFeature", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.facialHair", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.hairBack", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.hairFront", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.hat", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.mouth", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.neckwear", tgt: "app.atmobb.actor.profile#garment", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.nose", tgt: "app.atmobb.actor.profile#part", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#avatarBuilder.top", tgt: "app.atmobb.actor.profile#garment", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile#part", tgt: "app.atmobb.actor.profile#part.color", kind: "prop", name: Some("color") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile:body", tgt: "app.atmobb.actor.profile:body.avatarBuilder", kind: "prop", name: Some("avatarBuilder") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile:body", tgt: "app.atmobb.actor.profile:body.description", kind: "prop", name: Some("description") }
- Non-breaking: AddedEdge { src: "app.atmobb.actor.profile:body.avatarBuilder", tgt: "app.atmobb.actor.profile#avatarBuilder", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
+
"avatarBuilder": {
5
+
"description": "Legacy built avatar as part + colour choices. Kept so existing records stay valid.",
6
+
"properties": {
7
+
"accessory": {
8
+
"ref": "#part",
9
+
"type": "ref"
10
+
},
11
+
"eyebrows": {
12
+
"ref": "#part",
13
+
"type": "ref"
14
+
},
15
+
"eyes": {
16
+
"ref": "#part",
17
+
"type": "ref"
18
+
},
19
+
"facialFeature": {
20
+
"ref": "#part",
21
+
"type": "ref"
22
+
},
23
+
"facialHair": {
24
+
"ref": "#part",
25
+
"type": "ref"
26
+
},
27
+
"hairBack": {
28
+
"ref": "#part",
29
+
"type": "ref"
30
+
},
31
+
"hairFront": {
32
+
"ref": "#part",
33
+
"type": "ref"
34
+
},
35
+
"hat": {
36
+
"ref": "#part",
37
+
"type": "ref"
38
+
},
39
+
"mouth": {
40
+
"ref": "#part",
41
+
"type": "ref"
42
+
},
43
+
"neckwear": {
44
+
"ref": "#garment",
45
+
"type": "ref"
46
+
},
47
+
"nose": {
48
+
"ref": "#part",
49
+
"type": "ref"
50
+
},
51
+
"skin": {
52
+
"description": "Skin tone id; drives body, head, nose and facial-feature colouring.",
53
+
"type": "string"
54
+
},
55
+
"top": {
56
+
"ref": "#garment",
57
+
"type": "ref"
58
+
},
59
+
"v": {
60
+
"description": "Recipe schema version.",
61
+
"minimum": 1,
62
+
"type": "integer"
63
+
}
64
+
},
65
+
"required": [
66
+
"v",
67
+
"skin"
68
+
],
69
+
"type": "object"
70
+
},
71
+
"garment": {
72
+
"description": "A garment choice: which type (e.g. jacket, tie) in which colour.",
73
+
"properties": {
74
+
"color": {
75
+
"type": "string"
76
+
},
77
+
"type": {
78
+
"type": "string"
79
+
}
80
+
},
81
+
"required": [
82
+
"type",
83
+
"color"
84
+
],
85
+
"type": "object"
86
+
},
4
87
"main": {
5
-
"description": "A user's atmobb profile, global across all forums. Lives in the user's repo.",
88
+
"description": "A user's atmoBB profile, global across all forums. Lives in the user's repo.",
6
89
"key": "literal:self",
7
90
"record": {
8
91
"properties": {
9
92
"avatar": {
10
93
"accept": [
11
94
"image/png",
12
95
"image/jpeg",
13
96
"image/webp",
14
97
"image/gif"
15
98
],
16
99
"maxSize": 1000000,
17
100
"type": "blob"
18
101
},
102
+
"avatarBuilder": {
103
+
"description": "Legacy layered-avatar recipe from an earlier builder. atmobb ignores it; clients should read the `avatar` blob.",
104
+
"ref": "#avatarBuilder",
105
+
"type": "ref"
106
+
},
19
107
"createdAt": {
20
108
"format": "datetime",
21
109
"type": "string"
22
110
},
111
+
"description": {
112
+
"description": "Free-text bio, shown on the profile's About panel. Global across forums.",
113
+
"maxGraphemes": 256,
114
+
"maxLength": 2560,
115
+
"type": "string"
116
+
},
23
117
"displayName": {
24
118
"maxGraphemes": 64,
25
119
"maxLength": 640,
26
120
"type": "string"
27
121
},
28
122
"pronouns": {
29
123
"maxGraphemes": 64,
30
124
"maxLength": 640,
31
125
"type": "string"
32
126
},
33
127
"signature": {
34
128
"description": "Rendered under every post, phpBB style. Keep it short; clients may truncate.",
35
129
"items": {
36
130
"refs": [
37
131
"app.atmobb.richtext.block#text",
38
132
"app.atmobb.richtext.block#quote",
39
133
"app.atmobb.richtext.block#code",
40
134
"app.atmobb.richtext.block#image"
41
135
],
42
136
"type": "union"
43
137
},
44
138
"maxLength": 3,
45
139
"type": "array"
46
140
},
47
141
"title": {
48
142
"description": "Self-chosen user title, shown under the username where the forum allows it.",
49
143
"maxGraphemes": 64,
50
144
"maxLength": 640,
51
145
"type": "string"
52
146
},
53
147
"website": {
54
148
"format": "uri",
55
149
"type": "string"
56
150
}
57
151
},
58
152
"type": "object"
59
153
},
60
154
"type": "record"
155
+
},
156
+
"part": {
157
+
"description": "A part choice: a shape id and, where the part is colourable, a palette colour id.",
158
+
"properties": {
159
+
"color": {
160
+
"type": "string"
161
+
},
162
+
"shape": {
163
+
"type": "string"
164
+
}
165
+
},
166
+
"required": [
167
+
"shape"
168
+
],
169
+
"type": "object"
61
170
}
62
171
},
63
172
"id": "app.atmobb.actor.profile",
64
173
"lexicon": 1
65
174
}