app.atmobb.actor.profile

lexicons.atmobb.app

Schema Diff

+110 -1

From

CID
bafyreif4b2k5s3v...
Indexed At
2026-07-26 20:07 UTC
View this version

To

CID
bafyreibwmmhxrkj...
Indexed At
2026-09-13 00:02 UTC
View this version

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
}

Compare Other Versions

Lexicon Garden

@