ink.branchline.getBuds
Schema Diff
+13 -1
Compatibility Analysis
Backward Compatible
Backward compatible. 6 non-breaking changes.
Non-Breaking Changes (6)
- AddedVertex AddedVertex { vertex_id: "ink.branchline.getBuds#budView.bloomsAt" }
- AddedVertex AddedVertex { vertex_id: "ink.branchline.getBuds#budView.viewerBookmarked" }
- AddedVertex AddedVertex { vertex_id: "ink.branchline.getBuds#budView.viewerCanEdit" }
- AddedEdge AddedEdge { src: "ink.branchline.getBuds#budView", tgt: "ink.branchline.getBuds#budView.bloomsAt", kind: "prop", name: Some("bloomsAt") }
- AddedEdge AddedEdge { src: "ink.branchline.getBuds#budView", tgt: "ink.branchline.getBuds#budView.viewerBookmarked", kind: "prop", name: Some("viewerBookmarked") }
- AddedEdge AddedEdge { src: "ink.branchline.getBuds#budView", tgt: "ink.branchline.getBuds#budView.viewerCanEdit", kind: "prop", name: Some("viewerCanEdit") }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "ink.branchline.getBuds#budView.bloomsAt" }AddedVertex { vertex_id: "ink.branchline.getBuds#budView.viewerBookmarked" }AddedVertex { vertex_id: "ink.branchline.getBuds#budView.viewerCanEdit" }
Additional Notes
- Non-breaking: AddedEdge { src: "ink.branchline.getBuds#budView", tgt: "ink.branchline.getBuds#budView.bloomsAt", kind: "prop", name: Some("bloomsAt") }
- Non-breaking: AddedEdge { src: "ink.branchline.getBuds#budView", tgt: "ink.branchline.getBuds#budView.viewerBookmarked", kind: "prop", name: Some("viewerBookmarked") }
- Non-breaking: AddedEdge { src: "ink.branchline.getBuds#budView", tgt: "ink.branchline.getBuds#budView.viewerCanEdit", kind: "prop", name: Some("viewerCanEdit") }
1
1
{
2
2
"id": "ink.branchline.getBuds",
3
3
"defs": {
4
4
"main": {
5
5
"type": "query",
6
6
"output": {
7
7
"schema": {
8
8
"type": "object",
9
9
"required": [
10
10
"buds"
11
11
],
12
12
"properties": {
13
13
"buds": {
14
14
"type": "array",
15
15
"items": {
16
16
"ref": "#budView",
17
17
"type": "ref"
18
18
}
19
19
}
20
20
}
21
21
},
22
22
"encoding": "application/json"
23
23
},
24
24
"parameters": {
25
25
"type": "params",
26
26
"required": [
27
27
"uris"
28
28
],
29
29
"properties": {
30
30
"uris": {
31
31
"type": "array",
32
32
"items": {
33
33
"type": "string",
34
34
"format": "at-uri"
35
35
},
36
36
"maxLength": 25,
37
37
"description": "AT-URIs of buds to hydrate."
38
38
}
39
39
}
40
40
},
41
41
"description": "Hydrate full bud views for a set of AT-URIs. Buds are returned in the same order as the input URIs. Unknown URIs are silently omitted from the response."
42
42
},
43
43
"budView": {
44
44
"type": "object",
45
45
"required": [
46
46
"uri",
47
47
"cid",
48
-
"author",
49
48
"title",
50
49
"text",
51
50
"createdAt",
52
51
"depth",
53
52
"pollenCount"
54
53
],
55
54
"properties": {
56
55
"cid": {
57
56
"type": "string",
58
57
"format": "cid"
59
58
},
60
59
"uri": {
61
60
"type": "string",
62
61
"format": "at-uri"
63
62
},
64
63
"text": {
65
64
"type": "string"
66
65
},
67
66
"depth": {
68
67
"type": "integer",
69
68
"minimum": 0,
70
69
"description": "Depth of this bud in the story tree (0 = root)."
71
70
},
72
71
"title": {
73
72
"type": "string"
74
73
},
75
74
"author": {
76
75
"ref": "#authorView",
77
76
"type": "ref"
78
77
},
79
78
"locked": {
80
79
"type": "boolean",
81
80
"description": "True when the bud's bloom time can no longer be extended."
82
81
},
83
82
"parent": {
84
83
"ref": "com.atproto.repo.strongRef",
85
84
"type": "ref"
86
85
},
87
86
"growing": {
88
87
"type": "boolean",
89
88
"description": "True when the bud has not yet reached its bloomsAt time and is still in the growing window."
90
89
},
90
+
"bloomsAt": {
91
+
"type": "string",
92
+
"format": "datetime",
93
+
"description": "Timestamp when this bud finishes its growing window and blooms into the feed. Present on every bud; compare with the current time rather than relying on `growing` alone when a live countdown is needed."
94
+
},
91
95
"children": {
92
96
"type": "array",
93
97
"items": {
94
98
"type": "string",
95
99
"format": "at-uri"
96
100
},
97
101
"description": "AT-URIs of buds that extend this bud."
98
102
},
99
103
"createdAt": {
100
104
"type": "string",
101
105
"format": "datetime"
102
106
},
103
107
"formatting": {
104
108
"type": "array",
105
109
"items": {
106
110
"ref": "ink.branchline.bud#formatSpan",
107
111
"type": "ref"
108
112
}
109
113
},
110
114
"pollenCount": {
111
115
"type": "integer",
112
116
"minimum": 0,
113
117
"description": "Lifetime number of pollen grains on this bud (raw count, not the ranking-weighted score)."
114
118
},
119
+
"viewerCanEdit": {
120
+
"type": "boolean",
121
+
"description": "True when the authenticated viewer is permitted to edit this bud — they are the author, the bud has no children, and it is not locked. Omitted when there is no viewer session."
122
+
},
123
+
"viewerBookmarked": {
124
+
"type": "boolean",
125
+
"description": "True when the authenticated viewer has a bookmark whose subject is this bud. A bookmark earlier or later on the same lineage does not light this flag; only the exact subject does. Omitted when there is no viewer session."
126
+
},
115
127
"viewerPollinated": {
116
128
"type": "boolean",
117
129
"description": "True when the authenticated viewer has already pollinated this bud. Omitted when there is no viewer session."
118
130
},
119
131
"intermediateCount": {
120
132
"type": "integer",
121
133
"minimum": 0,
122
134
"description": "Count of distinct contributor DIDs on the root-to-bud path, including the root author and this bud's author."
123
135
}
124
136
}
125
137
},
126
138
"authorView": {
127
139
"type": "object",
128
140
"required": [
129
141
"did",
130
142
"handle"
131
143
],
132
144
"properties": {
133
145
"did": {
134
146
"type": "string",
135
147
"format": "did"
136
148
},
137
149
"handle": {
138
150
"type": "string",
139
151
"format": "handle"
140
152
},
141
153
"displayName": {
142
154
"type": "string",
143
155
"maxLength": 640,
144
156
"maxGraphemes": 64
145
157
}
146
158
}
147
159
}
148
160
},
149
161
"$type": "com.atproto.lexicon.schema",
150
162
"lexicon": 1
151
163
}