app.didpic.feed.post

lexicons.didpic.app

Schema Diff

+30 -0

From

CID
bafyreihfuntrzh5...
Indexed At
2026-05-16 06:10 UTC
View this version

To

CID
bafyreiet5ejgxkx...
Indexed At
2026-05-17 03:23 UTC
View this version

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
}

Compare Other Versions

Lexicon Garden

@