app.didpic.actor.defs

lexicons.didpic.app

Schema Diff

+86 -2

From

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

To

CID
bafyreiehfvelz24...
Indexed At
2026-05-24 01:15 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

4 breaking changes, 26 non-breaking changes.

Breaking Changes (4)
  • ConstraintAdded ConstraintAdded { vertex_id: "app.didpic.actor.defs#profileView.pronouns", sort: "maxLength", value: "640" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.didpic.actor.defs#profileView.pronouns", sort: "maxGraphemes", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.didpic.actor.defs#profileView.location", sort: "maxLength", value: "640" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.didpic.actor.defs#profileView.location", sort: "maxGraphemes", value: "64" }
Non-Breaking Changes (26)
  • AddedVertex AddedVertex { vertex_id: "app.didpic.actor.defs#composePrefs" }
  • AddedVertex AddedVertex { vertex_id: "app.didpic.actor.defs#composePrefs.requireAltText" }
  • AddedVertex AddedVertex { vertex_id: "app.didpic.actor.defs#feedFilters" }
  • AddedVertex AddedVertex { vertex_id: "app.didpic.actor.defs#feedFilters.hideNoAltText" }
  • AddedVertex AddedVertex { vertex_id: "app.didpic.actor.defs#feedPref" }
  • AddedVertex AddedVertex { vertex_id: "app.didpic.actor.defs#feedPref.value" }
  • AddedVertex AddedVertex { vertex_id: "app.didpic.actor.defs#labelPrefs" }
  • AddedVertex AddedVertex { vertex_id: "app.didpic.actor.defs#labelPrefs.labels" }
  • AddedVertex AddedVertex { vertex_id: "app.didpic.actor.defs#profileView.descriptionFacets" }
  • AddedVertex AddedVertex { vertex_id: "app.didpic.actor.defs#profileView.descriptionFacets:items" }
  • AddedVertex AddedVertex { vertex_id: "app.didpic.actor.defs#profileView.location" }
  • AddedVertex AddedVertex { vertex_id: "app.didpic.actor.defs#profileView.pronouns" }
  • AddedVertex AddedVertex { vertex_id: "app.didpic.actor.defs#profileView.viewerBlockedBy" }
  • AddedVertex AddedVertex { vertex_id: "app.didpic.actor.defs#profileView.viewerBlocking" }
  • AddedVertex AddedVertex { vertex_id: "app.didpic.actor.defs#profileView.viewerSubscription" }
  • AddedEdge AddedEdge { src: "app.didpic.actor.defs#composePrefs", tgt: "app.didpic.actor.defs#composePrefs.requireAltText", kind: "prop", name: Some("requireAltText") }
  • AddedEdge AddedEdge { src: "app.didpic.actor.defs#feedFilters", tgt: "app.didpic.actor.defs#feedFilters.hideNoAltText", kind: "prop", name: Some("hideNoAltText") }
  • AddedEdge AddedEdge { src: "app.didpic.actor.defs#feedPref", tgt: "app.didpic.actor.defs#feedPref.value", kind: "prop", name: Some("value") }
  • AddedEdge AddedEdge { src: "app.didpic.actor.defs#labelPrefs", tgt: "app.didpic.actor.defs#labelPrefs.labels", kind: "prop", name: Some("labels") }
  • AddedEdge AddedEdge { src: "app.didpic.actor.defs#profileView", tgt: "app.didpic.actor.defs#profileView.descriptionFacets", kind: "prop", name: Some("descriptionFacets") }
  • AddedEdge AddedEdge { src: "app.didpic.actor.defs#profileView", tgt: "app.didpic.actor.defs#profileView.location", kind: "prop", name: Some("location") }
  • AddedEdge AddedEdge { src: "app.didpic.actor.defs#profileView", tgt: "app.didpic.actor.defs#profileView.pronouns", kind: "prop", name: Some("pronouns") }
  • AddedEdge AddedEdge { src: "app.didpic.actor.defs#profileView", tgt: "app.didpic.actor.defs#profileView.viewerBlockedBy", kind: "prop", name: Some("viewerBlockedBy") }
  • AddedEdge AddedEdge { src: "app.didpic.actor.defs#profileView", tgt: "app.didpic.actor.defs#profileView.viewerBlocking", kind: "prop", name: Some("viewerBlocking") }
  • AddedEdge AddedEdge { src: "app.didpic.actor.defs#profileView", tgt: "app.didpic.actor.defs#profileView.viewerSubscription", kind: "prop", name: Some("viewerSubscription") }
  • AddedEdge AddedEdge { src: "app.didpic.actor.defs#profileView.descriptionFacets", tgt: "app.didpic.actor.defs#profileView.descriptionFacets:items", kind: "items", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "app.didpic.actor.defs#composePrefs" }
  • AddedVertex { vertex_id: "app.didpic.actor.defs#composePrefs.requireAltText" }
  • AddedVertex { vertex_id: "app.didpic.actor.defs#feedFilters" }
  • AddedVertex { vertex_id: "app.didpic.actor.defs#feedFilters.hideNoAltText" }
  • AddedVertex { vertex_id: "app.didpic.actor.defs#feedPref" }
  • AddedVertex { vertex_id: "app.didpic.actor.defs#feedPref.value" }
  • AddedVertex { vertex_id: "app.didpic.actor.defs#labelPrefs" }
  • AddedVertex { vertex_id: "app.didpic.actor.defs#labelPrefs.labels" }
  • AddedVertex { vertex_id: "app.didpic.actor.defs#profileView.descriptionFacets" }
  • AddedVertex { vertex_id: "app.didpic.actor.defs#profileView.descriptionFacets:items" }
  • AddedVertex { vertex_id: "app.didpic.actor.defs#profileView.location" }
  • AddedVertex { vertex_id: "app.didpic.actor.defs#profileView.pronouns" }
  • AddedVertex { vertex_id: "app.didpic.actor.defs#profileView.viewerBlockedBy" }
  • AddedVertex { vertex_id: "app.didpic.actor.defs#profileView.viewerBlocking" }
  • AddedVertex { vertex_id: "app.didpic.actor.defs#profileView.viewerSubscription" }

Constraint Changes

  • ConstraintAdded ConstraintAdded { vertex_id: "app.didpic.actor.defs#profileView.location", sort: "maxLength", value: "640" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.didpic.actor.defs#profileView.location", sort: "maxGraphemes", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.didpic.actor.defs#profileView.pronouns", sort: "maxGraphemes", value: "64" }
  • ConstraintAdded ConstraintAdded { vertex_id: "app.didpic.actor.defs#profileView.pronouns", sort: "maxLength", value: "640" }

Additional Notes

  • Non-breaking: AddedEdge { src: "app.didpic.actor.defs#composePrefs", tgt: "app.didpic.actor.defs#composePrefs.requireAltText", kind: "prop", name: Some("requireAltText") }
  • Non-breaking: AddedEdge { src: "app.didpic.actor.defs#feedFilters", tgt: "app.didpic.actor.defs#feedFilters.hideNoAltText", kind: "prop", name: Some("hideNoAltText") }
  • Non-breaking: AddedEdge { src: "app.didpic.actor.defs#feedPref", tgt: "app.didpic.actor.defs#feedPref.value", kind: "prop", name: Some("value") }
  • Non-breaking: AddedEdge { src: "app.didpic.actor.defs#labelPrefs", tgt: "app.didpic.actor.defs#labelPrefs.labels", kind: "prop", name: Some("labels") }
  • Non-breaking: AddedEdge { src: "app.didpic.actor.defs#profileView", tgt: "app.didpic.actor.defs#profileView.descriptionFacets", kind: "prop", name: Some("descriptionFacets") }
  • Non-breaking: AddedEdge { src: "app.didpic.actor.defs#profileView", tgt: "app.didpic.actor.defs#profileView.location", kind: "prop", name: Some("location") }
  • Non-breaking: AddedEdge { src: "app.didpic.actor.defs#profileView", tgt: "app.didpic.actor.defs#profileView.pronouns", kind: "prop", name: Some("pronouns") }
  • Non-breaking: AddedEdge { src: "app.didpic.actor.defs#profileView", tgt: "app.didpic.actor.defs#profileView.viewerBlockedBy", kind: "prop", name: Some("viewerBlockedBy") }
  • Non-breaking: AddedEdge { src: "app.didpic.actor.defs#profileView", tgt: "app.didpic.actor.defs#profileView.viewerBlocking", kind: "prop", name: Some("viewerBlocking") }
  • Non-breaking: AddedEdge { src: "app.didpic.actor.defs#profileView", tgt: "app.didpic.actor.defs#profileView.viewerSubscription", kind: "prop", name: Some("viewerSubscription") }
  • Non-breaking: AddedEdge { src: "app.didpic.actor.defs#profileView.descriptionFacets", tgt: "app.didpic.actor.defs#profileView.descriptionFacets:items", kind: "items", name: None }
1 1
{
2 2
  "id": "app.didpic.actor.defs",
3 3
  "defs": {
4 +
    "feedPref": {
5 +
      "type": "object",
6 +
      "required": [
7 +
        "value"
8 +
      ],
9 +
      "properties": {
10 +
        "value": {
11 +
          "type": "string",
12 +
          "knownValues": [
13 +
            "home",
14 +
            "discover"
15 +
          ]
16 +
        }
17 +
      },
18 +
      "description": "Last-selected home feed."
19 +
    },
20 +
    "labelPrefs": {
21 +
      "type": "object",
22 +
      "required": [
23 +
        "labels"
24 +
      ],
25 +
      "properties": {
26 +
        "labels": {
27 +
          "type": "unknown",
28 +
          "description": "Map of label id to action ('hide' | 'blur' | 'show')."
29 +
        }
30 +
      },
31 +
      "description": "Per-label moderation preferences."
32 +
    },
33 +
    "feedFilters": {
34 +
      "type": "object",
35 +
      "required": [
36 +
        "hideNoAltText"
37 +
      ],
38 +
      "properties": {
39 +
        "hideNoAltText": {
40 +
          "type": "boolean"
41 +
        }
42 +
      },
43 +
      "description": "Viewer-side feed filtering options."
44 +
    },
4 45
    "profileView": {
5 46
      "type": "object",
6 47
      "required": [
7 48
        "did"
8 49
      ],
9 50
      "properties": {
10 51
        "did": {
11 52
          "type": "string",
12 53
          "format": "did"
13 54
        },
14 55
        "handle": {
15 56
          "type": "string",
16 57
          "format": "handle"
17 58
        },
59 +
        "location": {
60 +
          "type": "string",
61 +
          "maxLength": 640,
62 +
          "maxGraphemes": 64
63 +
        },
64 +
        "pronouns": {
65 +
          "type": "string",
66 +
          "maxLength": 640,
67 +
          "maxGraphemes": 64
68 +
        },
18 69
        "avatarCid": {
19 70
          "type": "string",
20 71
          "format": "cid"
21 72
        },
22 73
        "bannerCid": {
23 74
          "type": "string",
24 75
          "format": "cid"
25 76
        },
26 77
        "indexedAt": {
27 78
          "type": "string",
28 79
          "format": "datetime"
29 80
        },
30 81
        "likesCount": {
31 82
          "type": "integer",
32 83
          "minimum": 0
33 84
        },
34 85
        "postsCount": {
35 86
          "type": "integer",
36 87
          "minimum": 0
37 88
        },
38 89
        "description": {
39 90
          "type": "string",
40 91
          "maxLength": 2560,
41 92
          "maxGraphemes": 256
42 93
        },
43 94
        "displayName": {
44 95
          "type": "string",
45 96
          "maxLength": 640,
46 97
          "maxGraphemes": 64
47 98
        },
48 99
        "followsCount": {
49 100
          "type": "integer",
50 101
          "minimum": 0
51 102
        },
52 103
        "followersCount": {
53 104
          "type": "integer",
54 105
          "minimum": 0
55 106
        },
107 +
        "viewerBlocking": {
108 +
          "type": "string",
109 +
          "format": "at-uri",
110 +
          "description": "URI of the viewer's block record for this actor, if any."
111 +
        },
112 +
        "viewerBlockedBy": {
113 +
          "type": "boolean",
114 +
          "description": "Whether this actor has blocked the viewer."
115 +
        },
56 116
        "viewerFollowing": {
57 117
          "type": "string",
58 118
          "format": "at-uri",
59 119
          "description": "URI of the viewer's follow record for this actor, if any."
120 +
        },
121 +
        "descriptionFacets": {
122 +
          "type": "array",
123 +
          "items": {
124 +
            "ref": "app.didpic.richtext.facet",
125 +
            "type": "ref"
126 +
          },
127 +
          "description": "Facets within description (mentions, tags, links)."
128 +
        },
129 +
        "viewerSubscription": {
130 +
          "type": "boolean",
131 +
          "description": "Whether the viewer is subscribed to this actor's post alerts."
132 +
        }
133 +
      },
134 +
      "description": "Full profile view."
135 +
    },
136 +
    "composePrefs": {
137 +
      "type": "object",
138 +
      "required": [
139 +
        "requireAltText"
140 +
      ],
141 +
      "properties": {
142 +
        "requireAltText": {
143 +
          "type": "boolean"
60 144
        }
61 145
      },
62 -
      "description": "Full profile view returned by app.didpic.actor.getProfile."
146 +
      "description": "Compose-time enforcement options."
63 147
    },
64 148
    "profileBasic": {
65 149
      "type": "object",
66 150
      "required": [
67 151
        "did"
68 152
      ],
69 153
      "properties": {
70 154
        "did": {
71 155
          "type": "string",
72 156
          "format": "did"
73 157
        },
74 158
        "handle": {
75 159
          "type": "string",
76 160
          "format": "handle"
77 161
        },
78 162
        "avatarCid": {
79 163
          "type": "string",
80 164
          "format": "cid"
81 165
        },
82 166
        "displayName": {
83 167
          "type": "string",
84 168
          "maxLength": 640,
85 169
          "maxGraphemes": 64
86 170
        },
87 171
        "viewerFollowing": {
88 172
          "type": "string",
89 173
          "format": "at-uri",
90 174
          "description": "URI of the viewer's follow record for this actor, if any."
91 175
        }
92 176
      },
93 -
      "description": "Minimal profile info embedded inside other views. `viewerFollowing` is populated where the calling endpoint can cheaply join viewer follow state (e.g. graph.getFollows/getFollowers); it may be absent elsewhere. `handle` comes from the user's DID document (kept in sync via jetstream identity events) and is absent only for DIDs we've never been able to resolve."
177 +
      "description": "Minimal profile info embedded inside other views."
94 178
    }
95 179
  },
96 180
  "$type": "com.atproto.lexicon.schema",
97 181
  "lexicon": 1
98 182
}

Compare Other Versions

Lexicon Garden

@