app.didpic.feed.post
Schema Diff
+30 -0
Compatibility Analysis
Breaking Changes Detected
1 breaking change, 10 non-breaking changes.
Breaking Changes (1)
- ConstraintAdded ConstraintAdded { vertex_id: "app.didpic.feed.post#selfLabel.val", sort: "maxLength", value: "128" }
Non-Breaking Changes (10)
- 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.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.labels", kind: "prop", name: Some("labels") }
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.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.labels", kind: "prop", name: Some("labels") }
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
17
"description": "Alt text describing the image for accessibility.",
18
18
"maxGraphemes": 1000
19
19
},
20
20
"text": {
21
21
"type": "string",
22
22
"maxLength": 22000,
23
23
"description": "Caption text. May be empty.",
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
+
"labels": {
36
+
"ref": "#selfLabels",
37
+
"type": "ref",
38
+
"description": "Self-applied content labels (e.g. nsfw). Lowercase identifiers; the union of self-labels and server-applied labels drives the viewer's hide/blur/show decision."
39
+
},
35
40
"createdAt": {
36
41
"type": "string",
37
42
"format": "datetime"
38
43
},
39
44
"aspectRatio": {
40
45
"ref": "#aspectRatio",
41
46
"type": "ref"
42
47
}
43
48
}
44
49
},
45
50
"description": "A didpic post: a single photo with an optional caption. Old-school photo-feed style — one image per post, no carousels."
46
51
},
52
+
"selfLabel": {
53
+
"type": "object",
54
+
"required": [
55
+
"val"
56
+
],
57
+
"properties": {
58
+
"val": {
59
+
"type": "string",
60
+
"maxLength": 128
61
+
}
62
+
}
63
+
},
64
+
"selfLabels": {
65
+
"type": "object",
66
+
"properties": {
67
+
"values": {
68
+
"type": "array",
69
+
"items": {
70
+
"ref": "#selfLabel",
71
+
"type": "ref"
72
+
}
73
+
}
74
+
},
75
+
"description": "Self-applied label set. Matches the shape of com.atproto.label.defs#selfLabels so labeling tooling and viewers can interoperate."
76
+
},
47
77
"aspectRatio": {
48
78
"type": "object",
49
79
"required": [
50
80
"width",
51
81
"height"
52
82
],
53
83
"properties": {
54
84
"width": {
55
85
"type": "integer",
56
86
"minimum": 1
57
87
},
58
88
"height": {
59
89
"type": "integer",
60
90
"minimum": 1
61
91
}
62
92
},
63
93
"description": "Width:height ratio of the image in pixels. Used by clients to reserve layout space."
64
94
}
65
95
},
66
96
"$type": "com.atproto.lexicon.schema",
67
97
"lexicon": 1
68
98
}