at.turtleme.chat.message
Schema Diff
+9 -0
Compatibility Analysis
Backward Compatible
Backward compatible. 6 non-breaking changes.
Non-Breaking Changes (6)
- AddedVertex AddedVertex { vertex_id: "app.bsky.richtext.facet" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.chat.message:body.facets" }
- AddedVertex AddedVertex { vertex_id: "at.turtleme.chat.message:body.facets:items" }
- AddedEdge AddedEdge { src: "at.turtleme.chat.message:body", tgt: "at.turtleme.chat.message:body.facets", kind: "prop", name: Some("facets") }
- AddedEdge AddedEdge { src: "at.turtleme.chat.message:body.facets", tgt: "at.turtleme.chat.message:body.facets:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "at.turtleme.chat.message:body.facets:items", tgt: "app.bsky.richtext.facet", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.bsky.richtext.facet" }AddedVertex { vertex_id: "at.turtleme.chat.message:body.facets" }AddedVertex { vertex_id: "at.turtleme.chat.message:body.facets:items" }
Additional Notes
- Non-breaking: AddedEdge { src: "at.turtleme.chat.message:body", tgt: "at.turtleme.chat.message:body.facets", kind: "prop", name: Some("facets") }
- Non-breaking: AddedEdge { src: "at.turtleme.chat.message:body.facets", tgt: "at.turtleme.chat.message:body.facets:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "at.turtleme.chat.message:body.facets:items", tgt: "app.bsky.richtext.facet", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"description": "A single message sent to a turtle meat chat room. Messages live in the author's own repository; a room is assembled by reading the backlinks that point at it.",
6
6
"key": "tid",
7
7
"record": {
8
8
"properties": {
9
9
"createdAt": {
10
10
"description": "Timestamp declared by the sending client. It is not verified, so readers that care about ordering should prefer the record key.",
11
11
"format": "datetime",
12
12
"type": "string"
13
13
},
14
+
"facets": {
15
+
"description": "Rich text over byte ranges of 'text', in Bluesky's facet shape. turtle meat writes and reads only mentions (app.bsky.richtext.facet#mention), each pointing at the DID the handle in the text meant when the line was sent. There is no threading: a mention points at an account, not at a message. Byte offsets count the whole of 'text', colour and effect codes included.",
16
+
"items": {
17
+
"ref": "app.bsky.richtext.facet",
18
+
"type": "ref"
19
+
},
20
+
"maxLength": 20,
21
+
"type": "array"
22
+
},
14
23
"room": {
15
24
"description": "The room the message was sent to. 'https://turtleme.at/chat/global' is the global room. Because this is a link, a backlink index can list a room's messages without a dedicated AppView. A message written into a clan, an at.turtleme.chat.clan permissioned space, carries that space's at:// URI here instead; it lives in the author's permissioned repository for the space rather than their public one.",
16
25
"format": "uri",
17
26
"type": "string"
18
27
},
19
28
"text": {
20
29
"description": "The message body. It may carry Old School RuneScape style chat codes in the form 'colour:effect:message', for example 'red:wave:hello there'. A client that does not recognise the codes should display the string verbatim rather than stripping it.",
21
30
"maxGraphemes": 200,
22
31
"maxLength": 1000,
23
32
"type": "string"
24
33
}
25
34
},
26
35
"required": [
27
36
"text",
28
37
"room",
29
38
"createdAt"
30
39
],
31
40
"type": "object"
32
41
},
33
42
"type": "record"
34
43
}
35
44
},
36
45
"id": "at.turtleme.chat.message",
37
46
"lexicon": 1
38
47
}