From
bafyreia355eeyh6wtmzrn4oomar3ljjh7s2jybxox3qwujhgwywb3qmb7q
indexed 2026-02-18 17:35 UTC
View this version
To
bafyreidmxvq4tc74hmyhduqlpz7z3xk4tivsspdi6tagcr2yuvxed45dxe
indexed 2026-03-12 11:16 UTC
View this version
Compatibility
breaking 9 breaking changes, 39 non-breaking changes.
Breaking changes (9)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "ai.syui.log.post:body", src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.publishedAt", kind: "prop", name: Some("publishedAt") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "ai.syui.log.post:body", src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.site", kind: "prop", name: Some("site") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "ai.syui.log.post#markdown", src: "ai.syui.log.post#markdown", tgt: "ai.syui.log.post#markdown.text", kind: "prop", name: Some("text") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "ai.syui.log.post:body", src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.createdAt", kind: "prop", name: Some("createdAt") }
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "ai.syui.log.post:body", src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.content", kind: "prop", name: Some("content") }
- 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.lang", kind: "prop", name: Some("lang") }
- KindChanged KindChanged { vertex_id: "ai.syui.log.post:body.content", old_kind: "string", new_kind: "union" }
Non-breaking changes (39)
- 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" }
- AddedVertex AddedVertex { vertex_id: "com.atproto.repo.strongRef" }
- 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.root", kind: "prop", name: Some("root") }
- 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.bskyPostRef", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
- 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.content:variant0", tgt: "ai.syui.log.post#markdown", kind: "ref", name: None }
- 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 }
- 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#translation.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: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" }
Migration guidance
Removed
RemovedVertex { vertex_id: "ai.syui.log.post:body.createdAt" }RemovedVertex { vertex_id: "ai.syui.log.post:body.lang" }
Added
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" }AddedVertex { vertex_id: "com.atproto.repo.strongRef" }
Constraint changes
- 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: "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" }
Notes
- Breaking: RequiredEdgeAdded { vertex_id: "ai.syui.log.post:body", src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.publishedAt", kind: "prop", name: Some("publishedAt") }
- Breaking: RequiredEdgeAdded { vertex_id: "ai.syui.log.post:body", src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.site", kind: "prop", name: Some("site") }
- Breaking: RequiredEdgeAdded { vertex_id: "ai.syui.log.post#markdown", src: "ai.syui.log.post#markdown", tgt: "ai.syui.log.post#markdown.text", kind: "prop", name: Some("text") }
- Breaking: RequiredEdgeRemoved { vertex_id: "ai.syui.log.post:body", src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.createdAt", kind: "prop", name: Some("createdAt") }
- Breaking: RequiredEdgeRemoved { vertex_id: "ai.syui.log.post:body", src: "ai.syui.log.post:body", tgt: "ai.syui.log.post:body.content", kind: "prop", name: Some("content") }
- 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: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.root", kind: "prop", name: Some("root") }
- 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.bskyPostRef", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
- 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.content:variant0", tgt: "ai.syui.log.post#markdown", kind: "ref", name: None }
- 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 }
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {44
"main": {5
"description": "Record containing a blog post.",5
"description": "Record containing a blog post. Compatible with site.standard.document.",66
"key": "tid",77
"record": {88
"properties": {9
"bskyPostRef": {10
"description": "Strong reference to a Bluesky post.",11
"ref": "com.atproto.repo.strongRef",12
"type": "ref"13
},914
"content": {10
"description": "The content of the post (markdown).",11
"maxGraphemes": 100000,12
"maxLength": 1000000,15
"closed": false,16
"description": "Open union for content. Supports markdown and other formats via $type.",17
"refs": [18
"#markdown"19
],20
"type": "union"21
},22
"coverImage": {23
"accept": [24
"image/*"25
],26
"description": "Cover image. Less than 1MB.",27
"maxSize": 1000000,28
"type": "blob"29
},30
"description": {31
"description": "A brief description or excerpt from the post.",32
"maxGraphemes": 3000,33
"maxLength": 30000,1334
"type": "string"1435
},15
"createdAt": {16
"description": "Client-declared timestamp when this post was originally created.",36
"langs": {37
"description": "Indicates human language of post content.",38
"items": {39
"format": "language",40
"type": "string"41
},42
"maxLength": 3,43
"type": "array"44
},45
"parent": {46
"description": "AT-URI of the parent message being replied to.",47
"format": "at-uri",48
"type": "string"49
},50
"path": {51
"description": "Combine with site URL to construct a canonical URL to the post.",52
"type": "string"53
},54
"publishedAt": {55
"description": "Timestamp of the post's publish time.",1756
"format": "datetime",1857
"type": "string"1958
},20
"lang": {21
"description": "Language code of the original content (e.g., 'ja', 'en').",22
"maxLength": 10,59
"root": {60
"description": "AT-URI of the root message in a thread.",61
"format": "at-uri",62
"type": "string"63
},64
"site": {65
"description": "Points to a publication record (at://) or a publication URL (https://).",66
"format": "uri",2367
"type": "string"2468
},69
"tags": {70
"description": "Tags to categorize the post.",71
"items": {72
"maxGraphemes": 128,73
"maxLength": 1280,74
"type": "string"75
},76
"type": "array"77
},78
"textContent": {79
"description": "Plaintext representation of the post content. Should not contain markdown or other formatting.",80
"type": "string"81
},2582
"title": {26
"description": "The title of the post.",27
"maxGraphemes": 300,28
"maxLength": 3000,83
"description": "Title of the post.",84
"maxGraphemes": 500,85
"maxLength": 5000,2986
"type": "string"3087
},3188
"translations": {3289
"description": "Translations of the post in other languages.",3390
"ref": "#translationMap",3491
"type": "ref"92
},93
"updatedAt": {94
"description": "Timestamp of the post's last edit.",95
"format": "datetime",96
"type": "string"3597
}3698
},3799
"required": [100
"site",38101
"title",39
"content",40
"createdAt"102
"publishedAt"41103
],42104
"type": "object"43105
},44106
"type": "record"45107
},108
"markdown": {109
"description": "Markdown content format.",110
"properties": {111
"text": {112
"description": "Markdown text content.",113
"maxGraphemes": 100000,114
"maxLength": 1000000,115
"type": "string"116
}117
},118
"required": [119
"text"120
],121
"type": "object"122
},46123
"translation": {47124
"description": "A translation of a post.",48125
"properties": {49126
"content": {50127
"maxGraphemes": 100000,51128
"maxLength": 1000000,52129
"type": "string"53130
},54131
"title": {55
"maxGraphemes": 300,56
"maxLength": 3000,132
"maxGraphemes": 500,133
"maxLength": 5000,57134
"type": "string"58135
}59136
},60137
"type": "object"61138
},62139
"translationMap": {63140
"description": "Map of language codes to translations.",64141
"properties": {65142
"en": {66143
"ref": "#translation",67144
"type": "ref"68145
},69146
"ja": {70147
"ref": "#translation",71148
"type": "ref"72149
}73150
},74151
"type": "object"75152
}76153
},77154
"id": "ai.syui.log.post",78155
"lexicon": 179156
}