From
bafyreieqxery4sjp7zpmu5bdd5dxzefg73i2mbexi2rqjhsd6mecytt22y
indexed 2026-08-25 13:18 UTC
View this version
To
bafyreigpaub35p7zgamtnumbajzq4gtnztypzluw2rutrvvai52ckcgzwq
indexed 2026-08-28 16:52 UTC
View this version
Compatibility
breaking 1 breaking change, 23 non-breaking changes.
Breaking changes (1)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "tech.tokimeki.forum.thread#richContent", src: "tech.tokimeki.forum.thread#richContent", tgt: "tech.tokimeki.forum.thread#richContent.type", kind: "prop", name: Some("type") }
Non-breaking changes (23)
- AddedVertex AddedVertex { vertex_id: "tech.tokimeki.forum.defs#image" }
- AddedVertex AddedVertex { vertex_id: "tech.tokimeki.forum.thread#richContent" }
- AddedVertex AddedVertex { vertex_id: "tech.tokimeki.forum.thread#richContent.attrs" }
- AddedVertex AddedVertex { vertex_id: "tech.tokimeki.forum.thread#richContent.content" }
- AddedVertex AddedVertex { vertex_id: "tech.tokimeki.forum.thread#richContent.content:items" }
- AddedVertex AddedVertex { vertex_id: "tech.tokimeki.forum.thread#richContent.marks" }
- AddedVertex AddedVertex { vertex_id: "tech.tokimeki.forum.thread#richContent.marks:items" }
- AddedVertex AddedVertex { vertex_id: "tech.tokimeki.forum.thread#richContent.text" }
- AddedVertex AddedVertex { vertex_id: "tech.tokimeki.forum.thread#richContent.type" }
- AddedVertex AddedVertex { vertex_id: "tech.tokimeki.forum.thread:body.blobs" }
- AddedVertex AddedVertex { vertex_id: "tech.tokimeki.forum.thread:body.blobs:items" }
- AddedVertex AddedVertex { vertex_id: "tech.tokimeki.forum.thread:body.content" }
- AddedEdge AddedEdge { src: "tech.tokimeki.forum.thread#richContent", tgt: "tech.tokimeki.forum.thread#richContent.attrs", kind: "prop", name: Some("attrs") }
- AddedEdge AddedEdge { src: "tech.tokimeki.forum.thread#richContent", tgt: "tech.tokimeki.forum.thread#richContent.content", kind: "prop", name: Some("content") }
- AddedEdge AddedEdge { src: "tech.tokimeki.forum.thread#richContent", tgt: "tech.tokimeki.forum.thread#richContent.marks", kind: "prop", name: Some("marks") }
- AddedEdge AddedEdge { src: "tech.tokimeki.forum.thread#richContent", tgt: "tech.tokimeki.forum.thread#richContent.text", kind: "prop", name: Some("text") }
- AddedEdge AddedEdge { src: "tech.tokimeki.forum.thread#richContent.content", tgt: "tech.tokimeki.forum.thread#richContent.content:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "tech.tokimeki.forum.thread#richContent.marks", tgt: "tech.tokimeki.forum.thread#richContent.marks:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "tech.tokimeki.forum.thread:body", tgt: "tech.tokimeki.forum.thread:body.blobs", kind: "prop", name: Some("blobs") }
- AddedEdge AddedEdge { src: "tech.tokimeki.forum.thread:body", tgt: "tech.tokimeki.forum.thread:body.content", kind: "prop", name: Some("content") }
- AddedEdge AddedEdge { src: "tech.tokimeki.forum.thread:body.blobs", tgt: "tech.tokimeki.forum.thread:body.blobs:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "tech.tokimeki.forum.thread:body.blobs:items", tgt: "tech.tokimeki.forum.defs#image", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "tech.tokimeki.forum.thread:body.content", tgt: "tech.tokimeki.forum.thread#richContent", kind: "ref", name: None }
Migration guidance
Added
AddedVertex { vertex_id: "tech.tokimeki.forum.defs#image" }AddedVertex { vertex_id: "tech.tokimeki.forum.thread#richContent" }AddedVertex { vertex_id: "tech.tokimeki.forum.thread#richContent.attrs" }AddedVertex { vertex_id: "tech.tokimeki.forum.thread#richContent.content" }AddedVertex { vertex_id: "tech.tokimeki.forum.thread#richContent.content:items" }AddedVertex { vertex_id: "tech.tokimeki.forum.thread#richContent.marks" }AddedVertex { vertex_id: "tech.tokimeki.forum.thread#richContent.marks:items" }AddedVertex { vertex_id: "tech.tokimeki.forum.thread#richContent.text" }AddedVertex { vertex_id: "tech.tokimeki.forum.thread#richContent.type" }AddedVertex { vertex_id: "tech.tokimeki.forum.thread:body.blobs" }AddedVertex { vertex_id: "tech.tokimeki.forum.thread:body.blobs:items" }AddedVertex { vertex_id: "tech.tokimeki.forum.thread:body.content" }
Notes
- Breaking: RequiredEdgeAdded { vertex_id: "tech.tokimeki.forum.thread#richContent", src: "tech.tokimeki.forum.thread#richContent", tgt: "tech.tokimeki.forum.thread#richContent.type", kind: "prop", name: Some("type") }
- Non-breaking: AddedEdge { src: "tech.tokimeki.forum.thread#richContent", tgt: "tech.tokimeki.forum.thread#richContent.attrs", kind: "prop", name: Some("attrs") }
- Non-breaking: AddedEdge { src: "tech.tokimeki.forum.thread#richContent", tgt: "tech.tokimeki.forum.thread#richContent.content", kind: "prop", name: Some("content") }
- Non-breaking: AddedEdge { src: "tech.tokimeki.forum.thread#richContent", tgt: "tech.tokimeki.forum.thread#richContent.marks", kind: "prop", name: Some("marks") }
- Non-breaking: AddedEdge { src: "tech.tokimeki.forum.thread#richContent", tgt: "tech.tokimeki.forum.thread#richContent.text", kind: "prop", name: Some("text") }
- Non-breaking: AddedEdge { src: "tech.tokimeki.forum.thread#richContent.content", tgt: "tech.tokimeki.forum.thread#richContent.content:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "tech.tokimeki.forum.thread#richContent.marks", tgt: "tech.tokimeki.forum.thread#richContent.marks:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "tech.tokimeki.forum.thread:body", tgt: "tech.tokimeki.forum.thread:body.blobs", kind: "prop", name: Some("blobs") }
- Non-breaking: AddedEdge { src: "tech.tokimeki.forum.thread:body", tgt: "tech.tokimeki.forum.thread:body.content", kind: "prop", name: Some("content") }
- Non-breaking: AddedEdge { src: "tech.tokimeki.forum.thread:body.blobs", tgt: "tech.tokimeki.forum.thread:body.blobs:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "tech.tokimeki.forum.thread:body.blobs:items", tgt: "tech.tokimeki.forum.defs#image", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "tech.tokimeki.forum.thread:body.content", tgt: "tech.tokimeki.forum.thread#richContent", kind: "ref", name: None }
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {44
"main": {55
"description": "A thread (topic) opened in a forum-kind channel. Written into the opener's own repo within the space. The thread carries its own body; comments are tech.tokimeki.forum.message records referencing it.",66
"key": "tid",77
"record": {88
"properties": {9
"blobs": {10
"description": "Images placed inline in `content`. Uploaded with com.atproto.repo.uploadBlob to the author's PDS; each `content` image node carries the cid of one of these blobs.",11
"items": {12
"ref": "tech.tokimeki.forum.defs#image",13
"type": "ref"14
},15
"maxLength": 20,16
"type": "array"17
},918
"channel": {1019
"description": "Space record URI of the tech.tokimeki.forum.channel this thread belongs to. A channel is a mutable container, so it is referenced by URI alone (like app.bsky.graph.listitem).",1120
"format": "at-uri",1221
"type": "string"1322
},23
"content": {24
"description": "Rich body as a ProseMirror/TipTap document tree: paragraphs, headings (2-4), lists, task lists, quotes, code blocks, tables, callouts, toggles, link cards, mentions and images. Image nodes reference an entry of `blobs` by cid. When present, `text` is the plain-text projection of this tree for search, previews and text-only clients.",25
"ref": "#richContent",26
"type": "ref"27
},1428
"createdAt": {1529
"format": "datetime",1630
"type": "string"1731
},1832
"editedAt": {1933
"description": "Set when the thread was edited in place (putRecord with the same rkey).",2034
"format": "datetime",2135
"type": "string"2236
},2337
"embed": {2438
"refs": [2539
"tech.tokimeki.forum.defs#images"2640
],2741
"type": "union"2842
},2943
"facets": {3044
"items": {3145
"ref": "app.bsky.richtext.facet",3246
"type": "ref"3347
},3448
"type": "array"3549
},3650
"labels": {3751
"description": "Self-applied labels, e.g. for adult content.",3852
"refs": [3953
"com.atproto.label.defs#selfLabels"4054
],4155
"type": "union"4256
},4357
"langs": {4458
"description": "Languages of the title and text (BCP-47).",4559
"items": {4660
"format": "language",4761
"type": "string"4862
},4963
"maxLength": 3,5064
"type": "array"5165
},5266
"tags": {5367
"items": {5468
"maxGraphemes": 32,5569
"maxLength": 320,5670
"type": "string"5771
},5872
"maxLength": 8,5973
"type": "array"6074
},6175
"text": {6276
"maxGraphemes": 5000,6377
"maxLength": 40000,6478
"type": "string"6579
},6680
"title": {6781
"maxGraphemes": 128,6882
"maxLength": 1280,6983
"type": "string"7084
}7185
},7286
"required": [7387
"channel",7488
"title",7589
"createdAt"7690
],7791
"type": "object"7892
},7993
"type": "record"94
},95
"richContent": {96
"description": "A ProseMirror/TipTap document node (recursive). Consumers validate against the node whitelist in the app; unknown node types are ignored.",97
"properties": {98
"attrs": {99
"description": "Node attributes (heading level, image cid/alt/size, link card url…).",100
"type": "unknown"101
},102
"content": {103
"description": "Child nodes.",104
"items": {105
"type": "unknown"106
},107
"type": "array"108
},109
"marks": {110
"description": "Inline marks on a text node: bold, italic, strike, underline, code, link{href}.",111
"items": {112
"type": "unknown"113
},114
"type": "array"115
},116
"text": {117
"description": "Text of a text node.",118
"type": "string"119
},120
"type": {121
"description": "Node type (doc, paragraph, heading, text, hardBreak, mention, bulletList, orderedList, listItem, taskList, taskItem, blockquote, codeBlock, horizontalRule, image, table, tableRow, tableCell, tableHeader, callout, details, linkCard).",122
"type": "string"123
}124
},125
"required": [126
"type"127
],128
"type": "object"80129
}81130
},82131
"id": "tech.tokimeki.forum.thread",83132
"lexicon": 184133
}