social.colibri.channel
Schema Diff
+33 -7
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 15 non-breaking changes.
Breaking Changes (1)
- ConstraintAdded ConstraintAdded { vertex_id: "social.colibri.channel:body.type", sort: "format", value: "nsid" }
Non-Breaking Changes (15)
- AddedVertex AddedVertex { vertex_id: "social.colibri.channel:body.allowedMembers" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.channel:body.allowedMembers:items" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.channel:body.allowedRoles" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.channel:body.allowedRoles:items" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.channel:body.linkEmbeds" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.channel:body.migratedFrom" }
- AddedVertex AddedVertex { vertex_id: "social.colibri.channel:body.ownerOnly" }
- AddedEdge AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.allowedMembers", kind: "prop", name: Some("allowedMembers") }
- AddedEdge AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.allowedRoles", kind: "prop", name: Some("allowedRoles") }
- AddedEdge AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.linkEmbeds", kind: "prop", name: Some("linkEmbeds") }
- AddedEdge AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.migratedFrom", kind: "prop", name: Some("migratedFrom") }
- AddedEdge AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.ownerOnly", kind: "prop", name: Some("ownerOnly") }
- AddedEdge AddedEdge { src: "social.colibri.channel:body.allowedMembers", tgt: "social.colibri.channel:body.allowedMembers:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "social.colibri.channel:body.allowedRoles", tgt: "social.colibri.channel:body.allowedRoles:items", kind: "items", name: None }
- ConstraintRemoved ConstraintRemoved { vertex_id: "social.colibri.channel:body.type", sort: "enum" }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "social.colibri.channel:body.allowedMembers" }AddedVertex { vertex_id: "social.colibri.channel:body.allowedMembers:items" }AddedVertex { vertex_id: "social.colibri.channel:body.allowedRoles" }AddedVertex { vertex_id: "social.colibri.channel:body.allowedRoles:items" }AddedVertex { vertex_id: "social.colibri.channel:body.linkEmbeds" }AddedVertex { vertex_id: "social.colibri.channel:body.migratedFrom" }AddedVertex { vertex_id: "social.colibri.channel:body.ownerOnly" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "social.colibri.channel:body.type", sort: "format", value: "nsid" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "social.colibri.channel:body.type", sort: "enum" }
Additional Notes
- Non-breaking: AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.allowedMembers", kind: "prop", name: Some("allowedMembers") }
- Non-breaking: AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.allowedRoles", kind: "prop", name: Some("allowedRoles") }
- Non-breaking: AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.linkEmbeds", kind: "prop", name: Some("linkEmbeds") }
- Non-breaking: AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.migratedFrom", kind: "prop", name: Some("migratedFrom") }
- Non-breaking: AddedEdge { src: "social.colibri.channel:body", tgt: "social.colibri.channel:body.ownerOnly", kind: "prop", name: Some("ownerOnly") }
- Non-breaking: AddedEdge { src: "social.colibri.channel:body.allowedMembers", tgt: "social.colibri.channel:body.allowedMembers:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "social.colibri.channel:body.allowedRoles", tgt: "social.colibri.channel:body.allowedRoles:items", kind: "items", name: None }
1
1
{
2
2
"id": "social.colibri.channel",
3
3
"defs": {
4
4
"main": {
5
5
"key": "tid",
6
6
"type": "record",
7
7
"record": {
8
8
"type": "object",
9
9
"required": [
10
10
"name",
11
11
"type",
12
12
"category",
13
13
"community"
14
14
],
15
15
"properties": {
16
16
"name": {
17
17
"type": "string",
18
18
"default": "New channel",
19
19
"maxLength": 32,
20
20
"minLength": 1,
21
21
"description": "The name of the channel."
22
22
},
23
23
"type": {
24
-
"enum": [
25
-
"text",
26
-
"voice",
27
-
"forum"
28
-
],
29
24
"type": "string",
30
-
"description": "The type of the channel."
25
+
"format": "nsid",
26
+
"description": "The type of the channel. Colibri provides social.colibri.channel.text, social.colibri.channel.forum, social.colibri.channel.link, and social.colibri.channel.voice."
31
27
},
32
28
"$type": {
33
29
"type": "string",
34
30
"format": "nsid",
35
31
"description": "The type of the record."
36
32
},
37
33
"category": {
38
34
"type": "string",
39
35
"format": "record-key",
40
36
"description": "The category this channel belongs to."
41
37
},
42
38
"community": {
43
39
"type": "string",
44
40
"format": "record-key",
45
41
"description": "The record key of the community this channel belongs to."
46
42
},
43
+
"ownerOnly": {
44
+
"type": "boolean",
45
+
"default": false,
46
+
"description": "Whether the owner of the community is the only one allowed to post in the channel or not."
47
+
},
48
+
"linkEmbeds": {
49
+
"type": "boolean",
50
+
"description": "Whether link previews are displayed in this channel. Absent means the community default applies."
51
+
},
47
52
"description": {
48
53
"type": "string",
49
54
"default": "",
50
55
"maxLength": 256,
51
56
"description": "A description of the channel."
57
+
},
58
+
"allowedRoles": {
59
+
"type": "array",
60
+
"items": {
61
+
"type": "string",
62
+
"format": "record-key"
63
+
},
64
+
"description": "Role record-keys allowed to post in this channel. Empty/absent means no role restriction."
65
+
},
66
+
"migratedFrom": {
67
+
"type": "string",
68
+
"format": "at-uri",
69
+
"description": "Set on a channel created by migrating a legacy community. Points at the legacy channel record this one replaces, so message history for the old channel can be surfaced here."
70
+
},
71
+
"allowedMembers": {
72
+
"type": "array",
73
+
"items": {
74
+
"type": "string",
75
+
"format": "did"
76
+
},
77
+
"description": "Member DIDs explicitly allowed to post in this channel, in addition to allowedRoles."
52
78
}
53
79
}
54
80
},
55
81
"description": "A channel that belongs to a category on Colibri."
56
82
}
57
83
},
58
84
"$type": "com.atproto.lexicon.schema",
59
85
"lexicon": 1,
60
-
"revision": 1
86
+
"revision": 5
61
87
}