app.didpic.feed.post
Schema Diff
+41 -4
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 14 non-breaking changes.
Breaking Changes (1)
- ConstraintAdded ConstraintAdded { vertex_id: "app.didpic.feed.post#selfLabel.val", sort: "maxLength", value: "128" }
Non-Breaking Changes (14)
- AddedVertex AddedVertex { vertex_id: "app.didpic.feed.post#selfLabel" }
- AddedVertex AddedVertex { vertex_id: "app.didpic.feed.post#selfLabel.val" }
- AddedVertex AddedVertex { vertex_id: "app.didpic.feed.post#selfLabels" }
- AddedVertex AddedVertex { vertex_id: "app.didpic.feed.post#selfLabels.values" }
- AddedVertex AddedVertex { vertex_id: "app.didpic.feed.post#selfLabels.values:items" }
- AddedVertex AddedVertex { vertex_id: "app.didpic.feed.post:body.facets" }
- AddedVertex AddedVertex { vertex_id: "app.didpic.feed.post:body.facets:items" }
- AddedVertex AddedVertex { vertex_id: "app.didpic.feed.post:body.labels" }
- AddedEdge AddedEdge { src: "app.didpic.feed.post#selfLabel", tgt: "app.didpic.feed.post#selfLabel.val", kind: "prop", name: Some("val") }
- AddedEdge AddedEdge { src: "app.didpic.feed.post#selfLabels", tgt: "app.didpic.feed.post#selfLabels.values", kind: "prop", name: Some("values") }
- AddedEdge AddedEdge { src: "app.didpic.feed.post#selfLabels.values", tgt: "app.didpic.feed.post#selfLabels.values:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "app.didpic.feed.post:body", tgt: "app.didpic.feed.post:body.facets", kind: "prop", name: Some("facets") }
- AddedEdge AddedEdge { src: "app.didpic.feed.post:body", tgt: "app.didpic.feed.post:body.labels", kind: "prop", name: Some("labels") }
- AddedEdge AddedEdge { src: "app.didpic.feed.post:body.facets", tgt: "app.didpic.feed.post:body.facets:items", kind: "items", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "app.didpic.feed.post#selfLabel" }AddedVertex { vertex_id: "app.didpic.feed.post#selfLabel.val" }AddedVertex { vertex_id: "app.didpic.feed.post#selfLabels" }AddedVertex { vertex_id: "app.didpic.feed.post#selfLabels.values" }AddedVertex { vertex_id: "app.didpic.feed.post#selfLabels.values:items" }AddedVertex { vertex_id: "app.didpic.feed.post:body.facets" }AddedVertex { vertex_id: "app.didpic.feed.post:body.facets:items" }AddedVertex { vertex_id: "app.didpic.feed.post:body.labels" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "app.didpic.feed.post#selfLabel.val", sort: "maxLength", value: "128" }
Additional Notes
- Non-breaking: AddedEdge { src: "app.didpic.feed.post#selfLabel", tgt: "app.didpic.feed.post#selfLabel.val", kind: "prop", name: Some("val") }
- Non-breaking: AddedEdge { src: "app.didpic.feed.post#selfLabels", tgt: "app.didpic.feed.post#selfLabels.values", kind: "prop", name: Some("values") }
- Non-breaking: AddedEdge { src: "app.didpic.feed.post#selfLabels.values", tgt: "app.didpic.feed.post#selfLabels.values:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "app.didpic.feed.post:body", tgt: "app.didpic.feed.post:body.facets", kind: "prop", name: Some("facets") }
- Non-breaking: AddedEdge { src: "app.didpic.feed.post:body", tgt: "app.didpic.feed.post:body.labels", kind: "prop", name: Some("labels") }
- Non-breaking: AddedEdge { src: "app.didpic.feed.post:body.facets", tgt: "app.didpic.feed.post:body.facets:items", kind: "items", name: None }
1
1
{
2
2
"id": "app.didpic.feed.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
10
"image",
11
11
"createdAt"
12
12
],
13
13
"properties": {
14
14
"alt": {
15
15
"type": "string",
16
16
"maxLength": 10000,
17
-
"description": "Alt text describing the image for accessibility.",
17
+
"description": "Alt text for accessibility.",
18
18
"maxGraphemes": 1000
19
19
},
20
20
"text": {
21
21
"type": "string",
22
22
"maxLength": 22000,
23
-
"description": "Caption text. May be empty.",
23
+
"description": "Caption text.",
24
24
"maxGraphemes": 2200
25
25
},
26
26
"image": {
27
27
"type": "blob",
28
28
"accept": [
29
29
"image/png",
30
30
"image/jpeg",
31
31
"image/webp"
32
32
],
33
33
"maxSize": 5000000
34
34
},
35
+
"facets": {
36
+
"type": "array",
37
+
"items": {
38
+
"ref": "app.didpic.richtext.facet",
39
+
"type": "ref"
40
+
}
41
+
},
42
+
"labels": {
43
+
"ref": "#selfLabels",
44
+
"type": "ref",
45
+
"description": "Self-applied content labels."
46
+
},
35
47
"createdAt": {
36
48
"type": "string",
37
49
"format": "datetime"
38
50
},
39
51
"aspectRatio": {
40
52
"ref": "#aspectRatio",
41
53
"type": "ref"
42
54
}
43
55
}
44
56
},
45
-
"description": "A didpic post: a single photo with an optional caption. Old-school photo-feed style — one image per post, no carousels."
57
+
"description": "A single-image photo post with optional caption."
46
58
},
59
+
"selfLabel": {
60
+
"type": "object",
61
+
"required": [
62
+
"val"
63
+
],
64
+
"properties": {
65
+
"val": {
66
+
"type": "string",
67
+
"maxLength": 128
68
+
}
69
+
}
70
+
},
71
+
"selfLabels": {
72
+
"type": "object",
73
+
"properties": {
74
+
"values": {
75
+
"type": "array",
76
+
"items": {
77
+
"ref": "#selfLabel",
78
+
"type": "ref"
79
+
}
80
+
}
81
+
},
82
+
"description": "Self-applied label set."
83
+
},
47
84
"aspectRatio": {
48
85
"type": "object",
49
86
"required": [
50
87
"width",
51
88
"height"
52
89
],
53
90
"properties": {
54
91
"width": {
55
92
"type": "integer",
56
93
"minimum": 1
57
94
},
58
95
"height": {
59
96
"type": "integer",
60
97
"minimum": 1
61
98
}
62
99
},
63
-
"description": "Width:height ratio of the image in pixels. Used by clients to reserve layout space."
100
+
"description": "Image width:height in pixels."
64
101
}
65
102
},
66
103
"$type": "com.atproto.lexicon.schema",
67
104
"lexicon": 1
68
105
}