ai.syui.log.post
Schema Diff
+93 -16
Compatibility Analysis
Breaking Changes Detected
11 breaking changes, 40 non-breaking changes.
Breaking Changes (11)
- RemovedVertex RemovedVertex { vertex_id: "ai.syui.log.post:body.createdAt" }
- RemovedVertex RemovedVertex { vertex_id: "ai.syui.log.post:body.lang" }
- RemovedEdge RemovedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.createdAt", kind: "prop", name: Some("createdAt") }
- RemovedEdge RemovedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.lang", kind: "prop", name: Some("lang") }
- KindChanged KindChanged { vertex_id: "ai.syui.log.post:body.content", old_kind: "string", new_kind: "union" }
- ConstraintAdded ConstraintAdded { vertex_id: "ai.syui.log.post#markdown.text", sort: "maxLength", value: "1000000" }
- ConstraintAdded ConstraintAdded { vertex_id: "ai.syui.log.post#markdown.text", sort: "maxGraphemes", value: "100000" }
- ConstraintAdded ConstraintAdded { vertex_id: "ai.syui.log.post:body.description", sort: "maxGraphemes", value: "3000" }
- ConstraintAdded ConstraintAdded { vertex_id: "ai.syui.log.post:body.description", sort: "maxLength", value: "30000" }
- ConstraintAdded ConstraintAdded { vertex_id: "ai.syui.log.post:body.tags:items", sort: "maxLength", value: "1280" }
- ConstraintAdded ConstraintAdded { vertex_id: "ai.syui.log.post:body.tags:items", sort: "maxGraphemes", value: "128" }
Non-Breaking Changes (40)
- AddedVertex AddedVertex { vertex_id: "ai.syui.log.post#markdown" }
- AddedVertex AddedVertex { vertex_id: "ai.syui.log.post#markdown.text" }
- AddedVertex AddedVertex { vertex_id: "ai.syui.log.post:body.bskyPostRef" }
- AddedVertex AddedVertex { vertex_id: "ai.syui.log.post:body.content:variant0" }
- AddedVertex AddedVertex { vertex_id: "ai.syui.log.post:body.coverImage" }
- AddedVertex AddedVertex { vertex_id: "ai.syui.log.post:body.description" }
- AddedVertex AddedVertex { vertex_id: "ai.syui.log.post:body.langs" }
- AddedVertex AddedVertex { vertex_id: "ai.syui.log.post:body.langs:items" }
- AddedVertex AddedVertex { vertex_id: "ai.syui.log.post:body.parent" }
- AddedVertex AddedVertex { vertex_id: "ai.syui.log.post:body.path" }
- AddedVertex AddedVertex { vertex_id: "ai.syui.log.post:body.publishedAt" }
- AddedVertex AddedVertex { vertex_id: "ai.syui.log.post:body.root" }
- AddedVertex AddedVertex { vertex_id: "ai.syui.log.post:body.site" }
- AddedVertex AddedVertex { vertex_id: "ai.syui.log.post:body.tags" }
- AddedVertex AddedVertex { vertex_id: "ai.syui.log.post:body.tags:items" }
- AddedVertex AddedVertex { vertex_id: "ai.syui.log.post:body.textContent" }
- AddedVertex AddedVertex { vertex_id: "ai.syui.log.post:body.updatedAt" }
- AddedEdge AddedEdge { src: "ai.syui.log.post#markdown", tgt: "ai.syui.log.post#markdown.text", kind: "prop", name: Some("text") }
- AddedEdge AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.bskyPostRef", kind: "prop", name: Some("bskyPostRef") }
- AddedEdge AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.coverImage", kind: "prop", name: Some("coverImage") }
- AddedEdge AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.description", kind: "prop", name: Some("description") }
- AddedEdge AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.langs", kind: "prop", name: Some("langs") }
- AddedEdge AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.parent", kind: "prop", name: Some("parent") }
- AddedEdge AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.path", kind: "prop", name: Some("path") }
- AddedEdge AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.publishedAt", kind: "prop", name: Some("publishedAt") }
- AddedEdge AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.root", kind: "prop", name: Some("root") }
- AddedEdge AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.site", kind: "prop", name: Some("site") }
- AddedEdge AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.tags", kind: "prop", name: Some("tags") }
- AddedEdge AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.textContent", kind: "prop", name: Some("textContent") }
- AddedEdge AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.updatedAt", kind: "prop", name: Some("updatedAt") }
- AddedEdge AddedEdge { src: "ai.syui.log.post:body.content", tgt: "ai.syui.log.post:body.content:variant0", kind: "variant", name: Some("#markdown") }
- AddedEdge AddedEdge { src: "ai.syui.log.post:body.langs", tgt: "ai.syui.log.post:body.langs:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "ai.syui.log.post:body.tags", tgt: "ai.syui.log.post:body.tags:items", kind: "items", name: None }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "ai.syui.log.post:body.title", sort: "maxGraphemes", old_value: "300", new_value: "500" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "ai.syui.log.post:body.title", sort: "maxLength", old_value: "3000", new_value: "5000" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "ai.syui.log.post:body.lang", sort: "maxLength" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "ai.syui.log.post#translation.title", sort: "maxLength", old_value: "3000", new_value: "5000" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "ai.syui.log.post#translation.title", sort: "maxGraphemes", old_value: "300", new_value: "500" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "ai.syui.log.post:body.content", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "ai.syui.log.post:body.content", sort: "maxGraphemes" }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "ai.syui.log.post:body.createdAt" }RemovedVertex { vertex_id: "ai.syui.log.post:body.lang" }
Added Elements
AddedVertex { vertex_id: "ai.syui.log.post#markdown" }AddedVertex { vertex_id: "ai.syui.log.post#markdown.text" }AddedVertex { vertex_id: "ai.syui.log.post:body.bskyPostRef" }AddedVertex { vertex_id: "ai.syui.log.post:body.content:variant0" }AddedVertex { vertex_id: "ai.syui.log.post:body.coverImage" }AddedVertex { vertex_id: "ai.syui.log.post:body.description" }AddedVertex { vertex_id: "ai.syui.log.post:body.langs" }AddedVertex { vertex_id: "ai.syui.log.post:body.langs:items" }AddedVertex { vertex_id: "ai.syui.log.post:body.parent" }AddedVertex { vertex_id: "ai.syui.log.post:body.path" }AddedVertex { vertex_id: "ai.syui.log.post:body.publishedAt" }AddedVertex { vertex_id: "ai.syui.log.post:body.root" }AddedVertex { vertex_id: "ai.syui.log.post:body.site" }AddedVertex { vertex_id: "ai.syui.log.post:body.tags" }AddedVertex { vertex_id: "ai.syui.log.post:body.tags:items" }AddedVertex { vertex_id: "ai.syui.log.post:body.textContent" }AddedVertex { vertex_id: "ai.syui.log.post:body.updatedAt" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "ai.syui.log.post:body.tags:items", sort: "maxLength", value: "1280" }
- ConstraintAdded ConstraintAdded { vertex_id: "ai.syui.log.post:body.tags:items", sort: "maxGraphemes", value: "128" }
- ConstraintAdded ConstraintAdded { vertex_id: "ai.syui.log.post:body.description", sort: "maxGraphemes", value: "3000" }
- ConstraintAdded ConstraintAdded { vertex_id: "ai.syui.log.post:body.description", sort: "maxLength", value: "30000" }
- ConstraintAdded ConstraintAdded { vertex_id: "ai.syui.log.post#markdown.text", sort: "maxLength", value: "1000000" }
- ConstraintAdded ConstraintAdded { vertex_id: "ai.syui.log.post#markdown.text", sort: "maxGraphemes", value: "100000" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "ai.syui.log.post:body.lang", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "ai.syui.log.post:body.content", sort: "maxLength" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "ai.syui.log.post:body.content", sort: "maxGraphemes" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "ai.syui.log.post:body.title", sort: "maxLength", old_value: "3000", new_value: "5000" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "ai.syui.log.post:body.title", sort: "maxGraphemes", old_value: "300", new_value: "500" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "ai.syui.log.post#translation.title", sort: "maxLength", old_value: "3000", new_value: "5000" }
- ConstraintRelaxed ConstraintRelaxed { vertex_id: "ai.syui.log.post#translation.title", sort: "maxGraphemes", old_value: "300", new_value: "500" }
Additional Notes
- Breaking: RemovedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.createdAt", kind: "prop", name: Some("createdAt") }
- Breaking: RemovedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.lang", kind: "prop", name: Some("lang") }
- Breaking: KindChanged { vertex_id: "ai.syui.log.post:body.content", old_kind: "string", new_kind: "union" }
- Non-breaking: AddedEdge { src: "ai.syui.log.post#markdown", tgt: "ai.syui.log.post#markdown.text", kind: "prop", name: Some("text") }
- Non-breaking: AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.bskyPostRef", kind: "prop", name: Some("bskyPostRef") }
- Non-breaking: AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.coverImage", kind: "prop", name: Some("coverImage") }
- Non-breaking: AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.description", kind: "prop", name: Some("description") }
- Non-breaking: AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.langs", kind: "prop", name: Some("langs") }
- Non-breaking: AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.parent", kind: "prop", name: Some("parent") }
- Non-breaking: AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.path", kind: "prop", name: Some("path") }
- Non-breaking: AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.publishedAt", kind: "prop", name: Some("publishedAt") }
- Non-breaking: AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.root", kind: "prop", name: Some("root") }
- Non-breaking: AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.site", kind: "prop", name: Some("site") }
- Non-breaking: AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.tags", kind: "prop", name: Some("tags") }
- Non-breaking: AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.textContent", kind: "prop", name: Some("textContent") }
- Non-breaking: AddedEdge { src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.updatedAt", kind: "prop", name: Some("updatedAt") }
- Non-breaking: AddedEdge { src: "ai.syui.log.post:body.content", tgt: "ai.syui.log.post:body.content:variant0", kind: "variant", name: Some("#markdown") }
- Non-breaking: AddedEdge { src: "ai.syui.log.post:body.langs", tgt: "ai.syui.log.post:body.langs:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "ai.syui.log.post:body.tags", tgt: "ai.syui.log.post:body.tags:items", kind: "items", name: None }
1
1
{
2
2
"id": "ai.syui.log.post",
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
+
"site",
10
11
"title",
11
-
"content",
12
-
"createdAt"
12
+
"publishedAt"
13
13
],
14
14
"properties": {
15
-
"lang": {
15
+
"path": {
16
+
"type": "string",
17
+
"description": "Combine with site URL to construct a canonical URL to the post."
18
+
},
19
+
"root": {
20
+
"type": "string",
21
+
"format": "at-uri",
22
+
"description": "AT-URI of the root message in a thread."
23
+
},
24
+
"site": {
16
25
"type": "string",
17
-
"maxLength": 10,
18
-
"description": "Language code of the original content (e.g., 'ja', 'en')."
26
+
"format": "uri",
27
+
"description": "Points to a publication record (at://) or a publication URL (https://)."
28
+
},
29
+
"tags": {
30
+
"type": "array",
31
+
"items": {
32
+
"type": "string",
33
+
"maxLength": 1280,
34
+
"maxGraphemes": 128
35
+
},
36
+
"description": "Tags to categorize the post."
19
37
},
38
+
"langs": {
39
+
"type": "array",
40
+
"items": {
41
+
"type": "string",
42
+
"format": "language"
43
+
},
44
+
"maxLength": 3,
45
+
"description": "Indicates human language of post content."
46
+
},
20
47
"title": {
21
48
"type": "string",
22
-
"maxLength": 3000,
23
-
"description": "The title of the post.",
24
-
"maxGraphemes": 300
49
+
"maxLength": 5000,
50
+
"description": "Title of the post.",
51
+
"maxGraphemes": 500
25
52
},
53
+
"parent": {
54
+
"type": "string",
55
+
"format": "at-uri",
56
+
"description": "AT-URI of the parent message being replied to."
57
+
},
26
58
"content": {
59
+
"refs": [
60
+
"#markdown"
61
+
],
62
+
"type": "union",
63
+
"closed": false,
64
+
"description": "Open union for content. Supports markdown and other formats via $type."
65
+
},
66
+
"updatedAt": {
27
67
"type": "string",
28
-
"maxLength": 1000000,
29
-
"description": "The content of the post (markdown).",
30
-
"maxGraphemes": 100000
68
+
"format": "datetime",
69
+
"description": "Timestamp of the post's last edit."
31
70
},
32
-
"createdAt": {
71
+
"coverImage": {
72
+
"type": "blob",
73
+
"accept": [
74
+
"image/*"
75
+
],
76
+
"maxSize": 1000000,
77
+
"description": "Cover image. Less than 1MB."
78
+
},
79
+
"bskyPostRef": {
80
+
"ref": "com.atproto.repo.strongRef",
81
+
"type": "ref",
82
+
"description": "Strong reference to a Bluesky post."
83
+
},
84
+
"description": {
85
+
"type": "string",
86
+
"maxLength": 30000,
87
+
"description": "A brief description or excerpt from the post.",
88
+
"maxGraphemes": 3000
89
+
},
90
+
"publishedAt": {
33
91
"type": "string",
34
92
"format": "datetime",
35
-
"description": "Client-declared timestamp when this post was originally created."
93
+
"description": "Timestamp of the post's publish time."
36
94
},
95
+
"textContent": {
96
+
"type": "string",
97
+
"description": "Plaintext representation of the post content. Should not contain markdown or other formatting."
98
+
},
37
99
"translations": {
38
100
"ref": "#translationMap",
39
101
"type": "ref",
40
102
"description": "Translations of the post in other languages."
41
103
}
42
104
}
43
105
},
44
-
"description": "Record containing a blog post."
106
+
"description": "Record containing a blog post. Compatible with site.standard.document."
45
107
},
108
+
"markdown": {
109
+
"type": "object",
110
+
"required": [
111
+
"text"
112
+
],
113
+
"properties": {
114
+
"text": {
115
+
"type": "string",
116
+
"maxLength": 1000000,
117
+
"description": "Markdown text content.",
118
+
"maxGraphemes": 100000
119
+
}
120
+
},
121
+
"description": "Markdown content format."
122
+
},
46
123
"translation": {
47
124
"type": "object",
48
125
"properties": {
49
126
"title": {
50
127
"type": "string",
51
-
"maxLength": 3000,
52
-
"maxGraphemes": 300
128
+
"maxLength": 5000,
129
+
"maxGraphemes": 500
53
130
},
54
131
"content": {
55
132
"type": "string",
56
133
"maxLength": 1000000,
57
134
"maxGraphemes": 100000
58
135
}
59
136
},
60
137
"description": "A translation of a post."
61
138
},
62
139
"translationMap": {
63
140
"type": "object",
64
141
"properties": {
65
142
"en": {
66
143
"ref": "#translation",
67
144
"type": "ref"
68
145
},
69
146
"ja": {
70
147
"ref": "#translation",
71
148
"type": "ref"
72
149
}
73
150
},
74
151
"description": "Map of language codes to translations."
75
152
}
76
153
},
77
154
"$type": "com.atproto.lexicon.schema",
78
155
"lexicon": 1
79
156
}