app.bulleted.node
Schema Diff
+8 -0
Compatibility Analysis
Backward Compatible
Backward compatible. 10 non-breaking changes.
Non-Breaking Changes (10)
- AddedVertex AddedVertex { vertex_id: "app.bsky.embed.external" }
- AddedVertex AddedVertex { vertex_id: "app.bsky.embed.record" }
- AddedVertex AddedVertex { vertex_id: "app.bulleted.node:body.embed" }
- AddedVertex AddedVertex { vertex_id: "app.bulleted.node:body.embed:variant0" }
- AddedVertex AddedVertex { vertex_id: "app.bulleted.node:body.embed:variant1" }
- AddedEdge AddedEdge { src: "app.bulleted.node:body", tgt: "app.bulleted.node:body.embed", kind: "prop", name: Some("embed") }
- AddedEdge AddedEdge { src: "app.bulleted.node:body.embed", tgt: "app.bulleted.node:body.embed:variant0", kind: "variant", name: Some("app.bsky.embed.external") }
- AddedEdge AddedEdge { src: "app.bulleted.node:body.embed", tgt: "app.bulleted.node:body.embed:variant1", kind: "variant", name: Some("app.bsky.embed.record") }
- AddedEdge AddedEdge { src: "app.bulleted.node:body.embed:variant0", tgt: "app.bsky.embed.external", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.bulleted.node:body.embed:variant1", tgt: "app.bsky.embed.record", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.bsky.embed.external" }AddedVertex { vertex_id: "app.bsky.embed.record" }AddedVertex { vertex_id: "app.bulleted.node:body.embed" }AddedVertex { vertex_id: "app.bulleted.node:body.embed:variant0" }AddedVertex { vertex_id: "app.bulleted.node:body.embed:variant1" }
Additional Notes
- Non-breaking: AddedEdge { src: "app.bulleted.node:body", tgt: "app.bulleted.node:body.embed", kind: "prop", name: Some("embed") }
- Non-breaking: AddedEdge { src: "app.bulleted.node:body.embed", tgt: "app.bulleted.node:body.embed:variant0", kind: "variant", name: Some("app.bsky.embed.external") }
- Non-breaking: AddedEdge { src: "app.bulleted.node:body.embed", tgt: "app.bulleted.node:body.embed:variant1", kind: "variant", name: Some("app.bsky.embed.record") }
- Non-breaking: AddedEdge { src: "app.bulleted.node:body.embed:variant0", tgt: "app.bsky.embed.external", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.bulleted.node:body.embed:variant1", tgt: "app.bsky.embed.record", kind: "ref", name: None }
1
1
{
2
2
"id": "app.bulleted.node",
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
"text",
11
11
"sortKey",
12
12
"createdAt"
13
13
],
14
14
"properties": {
15
15
"text": {
16
16
"type": "string",
17
17
"maxLength": 10000,
18
18
"description": "The bullet's content.",
19
19
"maxGraphemes": 2000
20
20
},
21
+
"embed": {
22
+
"refs": [
23
+
"app.bsky.embed.external",
24
+
"app.bsky.embed.record"
25
+
],
26
+
"type": "union",
27
+
"description": "Something this bullet stands for: an external page as a card, or a record elsewhere in the network. An open union — a variant this build does not know renders as a generic card rather than failing. The Bluesky defs are referenced rather than vendored, exactly as facets are, because the value of a quoted record is that other software recognises it as one. A record embed pins a CID, unlike a mirror's original: a quotation means the thing as it was, and one that silently rewrote itself would be a lie."
28
+
},
21
29
"facets": {
22
30
"type": "array",
23
31
"items": {
24
32
"ref": "app.bsky.richtext.facet",
25
33
"type": "ref"
26
34
},
27
35
"description": "Rich text annotations over text."
28
36
},
29
37
"layout": {
30
38
"type": "string",
31
39
"description": "How the bullet renders. Defaults to bullet. An open set, so values added by later versions do not fail validation.",
32
40
"knownValues": [
33
41
"bullet",
34
42
"todo",
35
43
"h1",
36
44
"h2",
37
45
"h3",
38
46
"codeBlock",
39
47
"quoteBlock"
40
48
]
41
49
},
42
50
"parent": {
43
51
"type": "string",
44
52
"format": "at-uri",
45
53
"description": "The parent node. Absent means top level. A bare AT-URI rather than a strongRef, because a strongRef pins a CID and the parent's CID changes on every edit to its text."
46
54
},
47
55
"display": {
48
56
"type": "string",
49
57
"description": "Whether this bullet's children are shown when a reader has no preference of their own. Treat an absent value as \"expanded\". A reader's own choice always wins; this is what a client shows before they have made one. An open set, so values added by later versions do not fail validation.",
50
58
"knownValues": [
51
59
"expanded",
52
60
"collapsed"
53
61
]
54
62
},
55
63
"sortKey": {
56
64
"type": "string",
57
65
"maxLength": 512,
58
66
"description": "Fractional index ordering this node among its siblings. Kept separate from the record key because record keys are TIDs, which sort by creation time and cannot change without recreating the record and breaking every inbound reference."
59
67
},
60
68
"createdAt": {
61
69
"type": "string",
62
70
"format": "datetime",
63
71
"description": "When the bullet was created."
64
72
},
65
73
"completedAt": {
66
74
"type": "string",
67
75
"format": "datetime",
68
76
"description": "Presence means completed; there is no separate boolean. Only meaningful for todo layout."
69
77
}
70
78
}
71
79
},
72
80
"description": "A single bullet in an outline. Parentage is expressed only by a child pointing up at its parent; there is no children array."
73
81
}
74
82
},
75
83
"$type": "com.atproto.lexicon.schema",
76
84
"lexicon": 1
77
85
}