rip.pds.admin.defs

pds.rip

Schema Diff

+14 -8

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

Compare Other Versions

Lexicon Garden

@