rip.pds.admin.defs

pds.rip

Schema Diff

+13 -7

From

CID
bafyreigmvhwkpvc...
Indexed At
2026-09-24 02:18 UTC
View this version

To

CID
bafyreignvwubwh4...
Indexed At
2026-09-24 02:56 UTC
View this version

Compatibility Analysis

Breaking Changes Detected

4 breaking changes, 4 non-breaking changes.

Breaking Changes (4)
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "rip.pds.admin.defs#ownerView", src: "rip.pds.admin.defs#ownerView", tgt: "rip.pds.admin.defs#ownerView.lastCreatedAt", kind: "prop", name: Some("lastCreatedAt") }
  • RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "rip.pds.admin.defs#ownerView", src: "rip.pds.admin.defs#ownerView", tgt: "rip.pds.admin.defs#ownerView.firstSeenAt", kind: "prop", name: Some("firstSeenAt") }
  • RemovedVertex RemovedVertex { vertex_id: "rip.pds.admin.defs#ownerView.recentHandle" }
  • RemovedEdge RemovedEdge { src: "rip.pds.admin.defs#ownerView", tgt: "rip.pds.admin.defs#ownerView.recentHandle", kind: "prop", name: Some("recentHandle") }
Non-Breaking Changes (4)
  • AddedVertex AddedVertex { vertex_id: "rip.pds.admin.defs#ownerView.handle" }
  • AddedVertex AddedVertex { vertex_id: "rip.pds.admin.defs#ownerView.lastSeenAt" }
  • AddedEdge AddedEdge { src: "rip.pds.admin.defs#ownerView", tgt: "rip.pds.admin.defs#ownerView.handle", kind: "prop", name: Some("handle") }
  • AddedEdge AddedEdge { src: "rip.pds.admin.defs#ownerView", tgt: "rip.pds.admin.defs#ownerView.lastSeenAt", kind: "prop", name: Some("lastSeenAt") }

Migration Guidance

Removed Elements

  • RemovedVertex { vertex_id: "rip.pds.admin.defs#ownerView.recentHandle" }

Added Elements

  • AddedVertex { vertex_id: "rip.pds.admin.defs#ownerView.handle" }
  • AddedVertex { vertex_id: "rip.pds.admin.defs#ownerView.lastSeenAt" }

Additional Notes

  • Breaking: RequiredEdgeRemoved { vertex_id: "rip.pds.admin.defs#ownerView", src: "rip.pds.admin.defs#ownerView", tgt: "rip.pds.admin.defs#ownerView.lastCreatedAt", kind: "prop", name: Some("lastCreatedAt") }
  • Breaking: RequiredEdgeRemoved { vertex_id: "rip.pds.admin.defs#ownerView", src: "rip.pds.admin.defs#ownerView", tgt: "rip.pds.admin.defs#ownerView.firstSeenAt", kind: "prop", name: Some("firstSeenAt") }
  • Breaking: RemovedEdge { src: "rip.pds.admin.defs#ownerView", tgt: "rip.pds.admin.defs#ownerView.recentHandle", kind: "prop", name: Some("recentHandle") }
  • Non-breaking: AddedEdge { src: "rip.pds.admin.defs#ownerView", tgt: "rip.pds.admin.defs#ownerView.handle", kind: "prop", name: Some("handle") }
  • Non-breaking: AddedEdge { src: "rip.pds.admin.defs#ownerView", tgt: "rip.pds.admin.defs#ownerView.lastSeenAt", kind: "prop", name: Some("lastSeenAt") }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "accountView": {
5 5
      "description": "An account as an operator sees it, which is an accountView plus who holds it.",
6 6
      "properties": {
7 7
        "createdAt": {
8 8
          "format": "datetime",
9 9
          "type": "string"
10 10
        },
11 11
        "deletedAt": {
12 12
          "format": "datetime",
13 13
          "type": "string"
14 14
        },
15 15
        "did": {
16 16
          "format": "did",
17 17
          "type": "string"
18 18
        },
19 19
        "didMethod": {
20 20
          "knownValues": [
21 21
            "plc",
22 22
            "web"
23 23
          ],
24 24
          "type": "string"
25 25
        },
26 26
        "expiresAt": {
27 27
          "description": "Absent when the account never expires.",
28 28
          "format": "datetime",
29 29
          "type": "string"
30 30
        },
31 31
        "extensions": {
32 32
          "type": "integer"
33 33
        },
34 34
        "handle": {
35 35
          "format": "handle",
36 36
          "type": "string"
37 37
        },
38 38
        "handleDomain": {
39 39
          "type": "string"
40 40
        },
41 41
        "origin": {
42 42
          "description": "Whether this server minted the identity or it arrived by migration.",
43 43
          "knownValues": [
44 44
            "minted",
45 45
            "imported"
46 46
          ],
47 47
          "type": "string"
48 48
        },
49 49
        "ownerDid": {
50 50
          "description": "Who asked for this account. Absent for anything created before the invite gate.",
51 51
          "format": "did",
52 52
          "type": "string"
53 53
        },
54 54
        "protected": {
55 55
          "type": "boolean"
56 56
        },
57 57
        "retiredAt": {
58 58
          "description": "When the identity was tombstoned or unpublished.",
59 59
          "format": "datetime",
60 60
          "type": "string"
61 61
        },
62 62
        "status": {
63 63
          "type": "string"
64 64
        }
65 65
      },
66 66
      "required": [
67 67
        "did",
68 68
        "handle",
69 69
        "didMethod",
70 70
        "origin",
71 71
        "createdAt"
72 72
      ],
73 73
      "type": "object"
74 74
    },
75 75
    "eventView": {
76 76
      "description": "One recorded lifecycle fact.",
77 77
      "properties": {
78 78
        "createdAt": {
79 79
          "format": "datetime",
80 80
          "type": "string"
81 81
        },
82 82
        "detail": {
83 83
          "description": "The event's payload as JSON, for anything the fields above do not carry.",
84 84
          "type": "string"
85 85
        },
86 86
        "did": {
87 87
          "format": "did",
88 88
          "type": "string"
89 89
        },
90 90
        "handle": {
91 91
          "description": "The handle that DID held, when it is still known.",
92 92
          "type": "string"
93 93
        },
94 94
        "id": {
95 95
          "type": "integer"
96 96
        },
97 97
        "source": {
98 98
          "description": "What observed it.",
99 99
          "knownValues": [
100 100
            "proxy",
101 101
            "firehose",
102 102
            "scheduler",
103 103
            "admin",
104 104
            "labeler"
105 105
          ],
106 106
          "type": "string"
107 107
        },
108 108
        "type": {
109 109
          "knownValues": [
110 110
            "account.created",
111 111
            "account.deleted",
112 112
            "account.takedown",
113 113
            "account.restored",
114 114
            "account.labeled",
115 115
            "handle.changed",
116 116
            "identity.retired"
117 117
          ],
118 118
          "type": "string"
119 119
        }
120 120
      },
121 121
      "required": [
122 122
        "id",
123 123
        "type",
124 124
        "source",
125 125
        "createdAt"
126 126
      ],
127 127
      "type": "object"
128 128
    },
129 129
    "limitsView": {
130 130
      "description": "An operator's exception to the configured limits for one person.",
131 131
      "properties": {
132 132
        "createdAt": {
133 133
          "format": "datetime",
134 134
          "type": "string"
135 135
        },
136 136
        "lifetimeDaysOverride": {
137 137
          "description": "Maximum lifetime in days. Absent means the configured default.",
138 138
          "type": "integer"
139 139
        },
140 140
        "note": {
141 141
          "description": "Why, in the operator's own words.",
142 142
          "maxLength": 500,
143 143
          "type": "string"
144 144
        },
145 145
        "quotaOverride": {
146 146
          "description": "Live accounts they may hold. Absent means the configured default.",
147 147
          "type": "integer"
148 148
        },
149 149
        "updatedAt": {
150 150
          "format": "datetime",
151 151
          "type": "string"
152 152
        },
153 153
        "updatedBy": {
154 154
          "format": "did",
155 155
          "type": "string"
156 156
        }
157 157
      },
158 158
      "required": [
159 159
        "createdAt",
160 160
        "updatedAt"
161 161
      ],
162 162
      "type": "object"
163 163
    },
164 164
    "ownerView": {
165 165
      "description": "Someone who holds or has held accounts on this server, as an operator sees them.",
166 166
      "properties": {
167 167
        "deleted": {
168 168
          "description": "Accounts of theirs that are gone, however they went.",
169 169
          "type": "integer"
170 170
        },
171 171
        "did": {
172 172
          "format": "did",
173 173
          "type": "string"
174 174
        },
175 175
        "firstSeenAt": {
176 +
          "description": "Earliest of their first account and their first authenticated request. Absent when neither is known.",
176 177
          "format": "datetime",
177 178
          "type": "string"
178 179
        },
180 +
        "handle": {
181 +
          "description": "The holder's own handle, resolved from their DID document. Not a handle they minted here. Absent when their identity could not be resolved, in which case the DID is the name.",
182 +
          "format": "handle",
183 +
          "type": "string"
184 +
        },
179 185
        "lastCreatedAt": {
186 +
          "description": "When they last created an account. Absent when they hold none and never have.",
187 +
          "format": "datetime",
188 +
          "type": "string"
189 +
        },
190 +
        "lastSeenAt": {
191 +
          "description": "Their last authenticated request. Absent for anyone last seen before this was recorded.",
180 192
          "format": "datetime",
181 193
          "type": "string"
182 194
        },
183 195
        "limits": {
184 -
          "description": "The override itself. Absent when the configured defaults apply untouched.",
196 +
          "description": "The override itself. Absent when the configured defaults apply untouched, which is the common case: a record exists for everyone who has used this server, not only for exceptions.",
185 197
          "ref": "#limitsView",
186 198
          "type": "ref"
187 199
        },
188 200
        "live": {
189 201
          "description": "Accounts they hold right now.",
190 202
          "type": "integer"
191 203
        },
192 204
        "maxLifetimeDays": {
193 205
          "description": "How far an account of theirs may be extended, after any override.",
194 206
          "type": "integer"
195 207
        },
196 208
        "quota": {
197 209
          "description": "Live accounts they may hold at once, after any override. Zero means they may create nothing further.",
198 210
          "type": "integer"
199 211
        },
200 -
        "recentHandle": {
201 -
          "description": "A handle of theirs, so the row is recognisable. Not an identity: handles are recycled.",
202 -
          "type": "string"
203 -
        },
204 212
        "takenDown": {
205 213
          "description": "Accounts of theirs the PDS currently considers taken down.",
206 214
          "type": "integer"
207 215
        }
208 216
      },
209 217
      "required": [
210 218
        "did",
211 219
        "live",
212 220
        "deleted",
213 221
        "takenDown",
214 -
        "firstSeenAt",
215 -
        "lastCreatedAt",
216 222
        "quota",
217 223
        "maxLifetimeDays"
218 224
      ],
219 225
      "type": "object"
220 226
    }
221 227
  },
222 228
  "id": "rip.pds.admin.defs",
223 229
  "lexicon": 1
224 230
}

Compare Other Versions

Lexicon Garden

@