site.mochott.article
Schema Diff
+32 -2
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 8 non-breaking changes.
Breaking Changes (2)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "site.mochott.article#minisiteCategory", src: "site.mochott.article#minisiteCategory", tgt: "site.mochott.article#minisiteCategory.slug", kind: "prop", name: Some("slug") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "site.mochott.article#minisiteCategory", src: "site.mochott.article#minisiteCategory", tgt: "site.mochott.article#minisiteCategory.minisite", kind: "prop", name: Some("minisite") }
Non-Breaking Changes (8)
- AddedVertex AddedVertex { vertex_id: "site.mochott.article#minisiteCategory" }
- AddedVertex AddedVertex { vertex_id: "site.mochott.article#minisiteCategory.minisite" }
- AddedVertex AddedVertex { vertex_id: "site.mochott.article#minisiteCategory.slug" }
- AddedVertex AddedVertex { vertex_id: "site.mochott.article:body.minisiteCategory" }
- AddedVertex AddedVertex { vertex_id: "site.mochott.article:body.topic" }
- AddedEdge AddedEdge { src: "site.mochott.article:body", tgt: "site.mochott.article:body.minisiteCategory", kind: "prop", name: Some("minisiteCategory") }
- AddedEdge AddedEdge { src: "site.mochott.article:body", tgt: "site.mochott.article:body.topic", kind: "prop", name: Some("topic") }
- AddedEdge AddedEdge { src: "site.mochott.article:body.minisiteCategory", tgt: "site.mochott.article#minisiteCategory", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "site.mochott.article#minisiteCategory" }AddedVertex { vertex_id: "site.mochott.article#minisiteCategory.minisite" }AddedVertex { vertex_id: "site.mochott.article#minisiteCategory.slug" }AddedVertex { vertex_id: "site.mochott.article:body.minisiteCategory" }AddedVertex { vertex_id: "site.mochott.article:body.topic" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "site.mochott.article#minisiteCategory", src: "site.mochott.article#minisiteCategory", tgt: "site.mochott.article#minisiteCategory.slug", kind: "prop", name: Some("slug") }
- Breaking: RequiredEdgeAdded { vertex_id: "site.mochott.article#minisiteCategory", src: "site.mochott.article#minisiteCategory", tgt: "site.mochott.article#minisiteCategory.minisite", kind: "prop", name: Some("minisite") }
- Non-breaking: AddedEdge { src: "site.mochott.article:body", tgt: "site.mochott.article:body.minisiteCategory", kind: "prop", name: Some("minisiteCategory") }
- Non-breaking: AddedEdge { src: "site.mochott.article:body", tgt: "site.mochott.article:body.topic", kind: "prop", name: Some("topic") }
- Non-breaking: AddedEdge { src: "site.mochott.article:body.minisiteCategory", tgt: "site.mochott.article#minisiteCategory", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"description": "Record representing a single blog article published to a publication.",
6
6
"key": "tid",
7
7
"record": {
8
8
"properties": {
9
9
"blobs": {
10
10
"description": "Blob references for media embedded within the article content.",
11
11
"items": {
12
12
"ref": "site.mochott.defs#blobMetadata",
13
13
"type": "ref"
14
14
},
15
15
"type": "array"
16
16
},
17
17
"category": {
18
18
"description": "Primary category of the article.",
19
19
"maxLength": 100,
20
20
"type": "string"
21
21
},
22
22
"content": {
23
23
"description": "Rich text content in TipTap editor JSON format.",
24
24
"ref": "#tiptapDocument",
25
25
"type": "ref"
26
26
},
27
27
"coverImage": {
28
28
"accept": [
29
29
"image/png",
30
30
"image/jpeg",
31
31
"image/webp"
32
32
],
33
33
"description": "Cover image displayed at the top of the article and in previews.",
34
34
"maxSize": 1000000,
35
35
"type": "blob"
36
36
},
37
37
"createdAt": {
38
-
"description": "Timestamp when the article was created.",
38
+
"description": "Publication timestamp of the article. Authors may set it to a past date (e.g. when migrating content); it is never later than the record write time.",
39
39
"format": "datetime",
40
40
"type": "string"
41
41
},
42
42
"description": {
43
43
"description": "Short summary or excerpt of the article, used for previews and SEO.",
44
44
"maxGraphemes": 3000,
45
45
"maxLength": 30000,
46
46
"type": "string"
47
47
},
48
+
"minisiteCategory": {
49
+
"description": "Category of the article within a minisite. Only meaningful while the article belongs to that minisite and the minisite still defines the slug.",
50
+
"ref": "#minisiteCategory",
51
+
"type": "ref"
52
+
},
48
53
"path": {
49
54
"description": "Custom URL path slug for the article. Used to construct human-readable URLs.",
50
55
"maxLength": 500,
51
56
"type": "string"
52
57
},
53
58
"profile": {
54
59
"description": "AT URI of the publication profile this article belongs to.",
55
60
"format": "at-uri",
56
61
"type": "string"
57
62
},
58
63
"tags": {
59
64
"description": "Tags for categorizing the article.",
60
65
"items": {
61
66
"maxGraphemes": 64,
62
67
"maxLength": 640,
63
68
"type": "string"
64
69
},
65
70
"maxLength": 8,
66
71
"type": "array"
67
72
},
68
73
"textContent": {
69
74
"description": "Plain text representation of the article content, primarily for search indexing and text-only consumers.",
70
75
"maxLength": 100000,
71
76
"type": "string"
72
77
},
73
78
"title": {
74
79
"description": "Title of the article.",
75
80
"maxGraphemes": 500,
76
81
"maxLength": 5000,
77
82
"type": "string"
78
83
},
84
+
"topic": {
85
+
"description": "Slug of the platform writing topic (投稿のお題) this article participates in.",
86
+
"maxLength": 100,
87
+
"type": "string"
88
+
},
79
89
"updatedAt": {
80
90
"description": "Timestamp when the article was last updated.",
81
91
"format": "datetime",
82
92
"type": "string"
83
93
}
84
94
},
85
95
"required": [
86
96
"profile",
87
97
"title",
88
98
"createdAt"
89
99
],
90
100
"type": "object"
91
101
},
92
102
"type": "record"
93
103
},
104
+
"minisiteCategory": {
105
+
"description": "A reference to a category defined in a site.mochott.minisite record.",
106
+
"properties": {
107
+
"minisite": {
108
+
"description": "AT URI of the site.mochott.minisite record that defines the category.",
109
+
"format": "at-uri",
110
+
"type": "string"
111
+
},
112
+
"slug": {
113
+
"description": "Slug of a category in that minisite's categories.",
114
+
"maxLength": 64,
115
+
"type": "string"
116
+
}
117
+
},
118
+
"required": [
119
+
"minisite",
120
+
"slug"
121
+
],
122
+
"type": "object"
123
+
},
94
124
"tiptapDocument": {
95
125
"description": "A TipTap editor document node. Represents a recursive tree structure for rich text content.",
96
126
"properties": {
97
127
"attrs": {
98
128
"description": "Node-specific attributes.",
99
129
"type": "unknown"
100
130
},
101
131
"content": {
102
132
"description": "Child nodes of this document node.",
103
133
"items": {
104
134
"type": "unknown"
105
135
},
106
136
"type": "array"
107
137
},
108
138
"marks": {
109
139
"description": "Inline formatting marks applied to this node.",
110
140
"items": {
111
141
"type": "unknown"
112
142
},
113
143
"type": "array"
114
144
},
115
145
"text": {
116
146
"description": "Text content for text-type nodes.",
117
147
"type": "string"
118
148
},
119
149
"type": {
120
150
"description": "Node type identifier (e.g. 'doc', 'paragraph', 'heading').",
121
151
"type": "string"
122
152
}
123
153
},
124
154
"required": [
125
155
"type"
126
156
],
127
157
"type": "object"
128
158
}
129
159
},
130
160
"description": "A blog article record. Contains rich text content, metadata, and optional media attachments.",
131
161
"id": "site.mochott.article",
132
162
"lexicon": 1,
133
-
"revision": 1
163
+
"revision": 2
134
164
}