social.colibri.beta.actor.defs

colibri.social

Schema Diff

+45 -5

From

CID
bafyreiav2qovor5...
Indexed At
2026-08-23 14:58 UTC
View this version

To

CID
bafyreihleg7aur4...
Indexed At
2026-08-23 17:25 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

3 breaking changes, 15 non-breaking changes.

Breaking Changes (3)
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.beta.actor.defs#mutedActor", src: "social.colibri.beta.actor.defs#mutedActor", tgt: "social.colibri.beta.actor.defs#mutedActor.did", kind: "prop", name: Some("did") }
  • RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "social.colibri.beta.actor.defs#mutedChannel", src: "social.colibri.beta.actor.defs#mutedChannel", tgt: "social.colibri.beta.actor.defs#mutedChannel.channel", kind: "prop", name: Some("channel") }
  • KindChanged KindChanged { vertex_id: "social.colibri.beta.actor.defs#mute.subject", old_kind: "string", new_kind: "union" }
Non-Breaking Changes (15)
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mute.subject:variant0" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mute.subject:variant1" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mutedActor" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mutedActor.did" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mutedChannel" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mutedChannel.channel" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#voiceState.serverDeafened" }
  • AddedVertex AddedVertex { vertex_id: "social.colibri.beta.actor.defs#voiceState.serverMuted" }
  • AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#mute.subject", tgt: "social.colibri.beta.actor.defs#mute.subject:variant0", kind: "variant", name: Some("#mutedActor") }
  • AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#mute.subject", tgt: "social.colibri.beta.actor.defs#mute.subject:variant1", kind: "variant", name: Some("#mutedChannel") }
  • AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#mute.subject:variant0", tgt: "social.colibri.beta.actor.defs#mutedActor", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#mute.subject:variant1", tgt: "social.colibri.beta.actor.defs#mutedChannel", kind: "ref", name: None }
  • AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#voiceState", tgt: "social.colibri.beta.actor.defs#voiceState.serverDeafened", kind: "prop", name: Some("serverDeafened") }
  • AddedEdge AddedEdge { src: "social.colibri.beta.actor.defs#voiceState", tgt: "social.colibri.beta.actor.defs#voiceState.serverMuted", kind: "prop", name: Some("serverMuted") }
  • ConstraintRemoved ConstraintRemoved { vertex_id: "social.colibri.beta.actor.defs#mute.subject", sort: "format" }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mute.subject:variant0" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mute.subject:variant1" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mutedActor" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mutedActor.did" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mutedChannel" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#mutedChannel.channel" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#voiceState.serverDeafened" }
  • AddedVertex { vertex_id: "social.colibri.beta.actor.defs#voiceState.serverMuted" }

Constraint Changes

  • ConstraintRemoved ConstraintRemoved { vertex_id: "social.colibri.beta.actor.defs#mute.subject", sort: "format" }

Additional Notes

  • Breaking: RequiredEdgeAdded { vertex_id: "social.colibri.beta.actor.defs#mutedActor", src: "social.colibri.beta.actor.defs#mutedActor", tgt: "social.colibri.beta.actor.defs#mutedActor.did", kind: "prop", name: Some("did") }
  • Breaking: RequiredEdgeAdded { vertex_id: "social.colibri.beta.actor.defs#mutedChannel", src: "social.colibri.beta.actor.defs#mutedChannel", tgt: "social.colibri.beta.actor.defs#mutedChannel.channel", kind: "prop", name: Some("channel") }
  • Breaking: KindChanged { vertex_id: "social.colibri.beta.actor.defs#mute.subject", old_kind: "string", new_kind: "union" }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#mute.subject", tgt: "social.colibri.beta.actor.defs#mute.subject:variant0", kind: "variant", name: Some("#mutedActor") }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#mute.subject", tgt: "social.colibri.beta.actor.defs#mute.subject:variant1", kind: "variant", name: Some("#mutedChannel") }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#mute.subject:variant0", tgt: "social.colibri.beta.actor.defs#mutedActor", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#mute.subject:variant1", tgt: "social.colibri.beta.actor.defs#mutedChannel", kind: "ref", name: None }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#voiceState", tgt: "social.colibri.beta.actor.defs#voiceState.serverDeafened", kind: "prop", name: Some("serverDeafened") }
  • Non-breaking: AddedEdge { src: "social.colibri.beta.actor.defs#voiceState", tgt: "social.colibri.beta.actor.defs#voiceState.serverMuted", kind: "prop", name: Some("serverMuted") }
1 1
{
2 2
  "id": "social.colibri.beta.actor.defs",
3 3
  "defs": {
4 4
    "mute": {
5 5
      "type": "object",
6 6
      "required": [
7 7
        "subject",
8 8
        "createdAt"
9 9
      ],
10 10
      "properties": {
11 11
        "subject": {
12 -
          "type": "string",
13 -
          "format": "did",
14 -
          "description": "The muted user or community."
12 +
          "refs": [
13 +
            "#mutedActor",
14 +
            "#mutedChannel"
15 +
          ],
16 +
          "type": "union",
17 +
          "closed": true,
18 +
          "description": "What is muted. A user or a community is named by DID, a channel by its space."
15 19
        },
16 20
        "createdAt": {
17 21
          "type": "string",
18 22
          "format": "datetime",
19 23
          "description": "When the mute was created."
20 24
        }
21 25
      },
22 26
      "description": "A muted subject."
23 27
    },
24 28
    "status": {
25 29
      "type": "object",
26 30
      "required": [
27 31
        "text"
28 32
      ],
29 33
      "properties": {
30 34
        "text": {
31 35
          "type": "string",
32 36
          "maxLength": 32,
33 37
          "description": "The status text."
34 38
        },
35 39
        "emoji": {
36 40
          "type": "string",
37 41
          "description": "An emoji shown beside the status."
38 42
        }
39 43
      },
40 44
      "description": "A user's status line."
41 45
    },
42 46
    "presence": {
43 47
      "type": "object",
44 48
      "required": [
45 49
        "onlineState"
46 50
      ],
47 51
      "properties": {
48 52
        "voice": {
49 53
          "ref": "#voiceState",
50 54
          "type": "ref",
51 55
          "description": "Where the user is connected for voice, if anywhere."
52 56
        },
53 57
        "status": {
54 58
          "ref": "#status",
55 59
          "type": "ref",
56 60
          "description": "The user's status line."
57 61
        },
58 62
        "onlineState": {
59 63
          "type": "string",
60 64
          "description": "Derived online state.",
61 65
          "knownValues": [
62 66
            "online",
63 67
            "away",
64 68
            "dnd",
65 69
            "offline"
66 70
          ]
67 71
        }
68 72
      },
69 73
      "description": "A user's live, off-protocol state."
70 74
    },
75 +
    "mutedActor": {
76 +
      "type": "object",
77 +
      "required": [
78 +
        "did"
79 +
      ],
80 +
      "properties": {
81 +
        "did": {
82 +
          "type": "string",
83 +
          "format": "did",
84 +
          "description": "The muted user or community."
85 +
        }
86 +
      },
87 +
      "description": "A muted user or community."
88 +
    },
71 89
    "voiceState": {
72 90
      "type": "object",
73 91
      "required": [
74 92
        "channel"
75 93
      ],
76 94
      "properties": {
77 95
        "muted": {
78 96
          "type": "boolean",
79 -
          "description": "Whether the user has muted their microphone."
97 +
          "description": "Whether the user's microphone is muted, for any reason."
80 98
        },
81 99
        "channel": {
82 100
          "type": "string",
83 101
          "format": "space-ref",
84 102
          "description": "The voice channel the user is connected to."
85 103
        },
86 104
        "deafened": {
87 105
          "type": "boolean",
88 -
          "description": "Whether the user has deafened themselves."
106 +
          "description": "Whether the user has incoming audio silenced, for any reason."
107 +
        },
108 +
        "serverMuted": {
109 +
          "type": "boolean",
110 +
          "description": "Whether a moderator muted them. When this is true they cannot unmute themselves, and a client must not offer them the control."
111 +
        },
112 +
        "serverDeafened": {
113 +
          "type": "boolean",
114 +
          "description": "Whether a moderator deafened them. When this is true they cannot undeafen themselves."
89 115
        }
90 116
      },
91 117
      "description": "A user's voice connection."
92 118
    },
93 119
    "preferences": {
94 120
      "type": "object",
95 121
      "required": [
96 122
        "notificationLevel",
97 123
        "communityOrder",
98 124
        "mutes",
99 125
        "gifFavorites"
100 126
      ],
101 127
      "properties": {
102 128
        "mutes": {
103 129
          "type": "array",
104 130
          "items": {
105 131
            "ref": "#mute",
106 132
            "type": "ref"
107 133
          },
108 134
          "description": "Subjects the user has muted."
109 135
        },
110 136
        "gifFavorites": {
111 137
          "type": "array",
112 138
          "items": {
113 139
            "ref": "social.colibri.beta.embed.defs#gifView",
114 140
            "type": "ref"
115 141
          },
116 142
          "description": "GIFs saved from the picker, stored whole."
117 143
        },
118 144
        "communityOrder": {
119 145
          "type": "array",
120 146
          "items": {
121 147
            "type": "string",
122 148
            "format": "did",
123 149
            "description": "A community."
124 150
          },
125 151
          "description": "Communities in preferred sidebar order."
126 152
        },
127 153
        "notificationLevel": {
128 154
          "type": "string",
129 155
          "description": "Which messages produce a notification.",
130 156
          "knownValues": [
131 157
            "all",
132 158
            "mentionsAndReplies"
133 159
          ]
134 160
        }
135 161
      },
136 162
      "description": "The authenticated user's own settings, as the AppView currently holds them."
137 163
    },
138 164
    "profileView": {
139 165
      "type": "object",
140 166
      "required": [
141 167
        "did",
142 168
        "handle",
143 169
        "displayName",
144 170
        "isBot",
145 171
        "syncBluesky"
146 172
      ],
147 173
      "properties": {
148 174
        "did": {
149 175
          "type": "string",
150 176
          "format": "did",
151 177
          "description": "The user's DID."
152 178
        },
153 179
        "isBot": {
154 180
          "type": "boolean",
155 181
          "description": "Whether the account is labelled as an automated account."
156 182
        },
157 183
        "theme": {
158 184
          "ref": "social.colibri.beta.actor.profile#theme",
159 185
          "type": "ref",
160 186
          "description": "Colibri-only profile theming, read from the profile record even when the mirrored fields come from Bluesky."
161 187
        },
162 188
        "avatar": {
163 189
          "type": "string",
164 190
          "format": "uri",
165 191
          "description": "URL of the user's avatar, served by this AppView's blob proxy."
166 192
        },
167 193
        "banner": {
168 194
          "type": "string",
169 195
          "format": "uri",
170 196
          "description": "URL of the user's profile banner, served by this AppView's blob proxy."
171 197
        },
172 198
        "handle": {
173 199
          "type": "string",
174 200
          "format": "handle",
175 201
          "description": "The user's handle, or 'handle.invalid' when it does not resolve."
176 202
        },
177 203
        "presence": {
178 204
          "ref": "#presence",
179 205
          "type": "ref",
180 206
          "description": "Live presence, when the AppView is tracking any."
181 207
        },
182 208
        "description": {
183 209
          "type": "string",
184 210
          "description": "Resolved bio."
185 211
        },
186 212
        "displayName": {
187 213
          "type": "string",
188 214
          "description": "Resolved display name, falling back to the handle."
189 215
        },
190 216
        "syncBluesky": {
191 217
          "type": "boolean",
192 218
          "description": "Whether the mirrored profile fields come from app.bsky.actor.profile."
193 219
        },
194 220
        "preferredBadge": {
195 221
          "type": "string",
196 222
          "description": "Label value of the badge the user chose to display."
197 223
        }
198 224
      },
199 225
      "description": "A Colibri user as the AppView serves them: identity, resolved profile, and presence."
226 +
    },
227 +
    "mutedChannel": {
228 +
      "type": "object",
229 +
      "required": [
230 +
        "channel"
231 +
      ],
232 +
      "properties": {
233 +
        "channel": {
234 +
          "type": "string",
235 +
          "format": "space-ref",
236 +
          "description": "The muted channel's space."
237 +
        }
238 +
      },
239 +
      "description": "A muted channel. Muting a channel silences it without leaving the community it belongs to."
200 240
    }
201 241
  },
202 242
  "$type": "com.atproto.lexicon.schema",
203 243
  "lexicon": 1
204 244
}

Compare Other Versions

Lexicon Garden

@