space.highport.defs
Schema Diff
+131 -27
Compatibility Analysis
Breaking Changes Detected
5 breaking changes, 33 non-breaking changes.
Breaking Changes (5)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.highport.defs#delegationView", src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.certMode", kind: "prop", name: Some("certMode") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.highport.defs#defaultTileView", src: "space.highport.defs#defaultTileView", tgt: "space.highport.defs#defaultTileView.uri", kind: "prop", name: Some("uri") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "space.highport.defs#defaultTileView", src: "space.highport.defs#defaultTileView", tgt: "space.highport.defs#defaultTileView.cid", kind: "prop", name: Some("cid") }
- ConstraintTightened ConstraintTightened { vertex_id: "space.highport.defs#verificationCheck.name", sort: "knownValues", old_value: "[\"ownership\",\"traffic\",\"conflict\"]", new_value: "[\"ownership\",\"traffic\",\"conflict\",\"certificate\"]" }
- ConstraintTightened ConstraintTightened { vertex_id: "space.highport.defs#edgeReachStatus", sort: "knownValues", old_value: "[\"unknown\",\"routed\",\"foreign\",\"unreachable\"]", new_value: "[\"unknown\",\"routed\",\"foreign\",\"unreachable\",\"other-deployment\",\"unproven\"]" }
Non-Breaking Changes (33)
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#defaultTileView" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#defaultTileView.appliedTo" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#defaultTileView.cid" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#defaultTileView.name" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#defaultTileView.setAt" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#defaultTileView.uri" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationState" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationView" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationView.certMode" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationView.challengeTarget" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationView.defaultTile" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationView.grantedAt" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationView.maxNames" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationView.probeHostname" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationView.state" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#delegationView.wildcardObservedAt" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#domainView.delegatedBase" }
- AddedVertex AddedVertex { vertex_id: "space.highport.defs#domainView.delegation" }
- AddedEdge AddedEdge { src: "space.highport.defs#defaultTileView", tgt: "space.highport.defs#defaultTileView.appliedTo", kind: "prop", name: Some("appliedTo") }
- AddedEdge AddedEdge { src: "space.highport.defs#defaultTileView", tgt: "space.highport.defs#defaultTileView.name", kind: "prop", name: Some("name") }
- AddedEdge AddedEdge { src: "space.highport.defs#defaultTileView", tgt: "space.highport.defs#defaultTileView.setAt", kind: "prop", name: Some("setAt") }
- AddedEdge AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.challengeTarget", kind: "prop", name: Some("challengeTarget") }
- AddedEdge AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.defaultTile", kind: "prop", name: Some("defaultTile") }
- AddedEdge AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.grantedAt", kind: "prop", name: Some("grantedAt") }
- AddedEdge AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.maxNames", kind: "prop", name: Some("maxNames") }
- AddedEdge AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.probeHostname", kind: "prop", name: Some("probeHostname") }
- AddedEdge AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.state", kind: "prop", name: Some("state") }
- AddedEdge AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.wildcardObservedAt", kind: "prop", name: Some("wildcardObservedAt") }
- AddedEdge AddedEdge { src: "space.highport.defs#delegationView.defaultTile", tgt: "space.highport.defs#defaultTileView", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "space.highport.defs#delegationView.state", tgt: "space.highport.defs#delegationState", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "space.highport.defs#domainView", tgt: "space.highport.defs#domainView.delegatedBase", kind: "prop", name: Some("delegatedBase") }
- AddedEdge AddedEdge { src: "space.highport.defs#domainView", tgt: "space.highport.defs#domainView.delegation", kind: "prop", name: Some("delegation") }
- AddedEdge AddedEdge { src: "space.highport.defs#domainView.delegation", tgt: "space.highport.defs#delegationView", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "space.highport.defs#defaultTileView" }AddedVertex { vertex_id: "space.highport.defs#defaultTileView.appliedTo" }AddedVertex { vertex_id: "space.highport.defs#defaultTileView.cid" }AddedVertex { vertex_id: "space.highport.defs#defaultTileView.name" }AddedVertex { vertex_id: "space.highport.defs#defaultTileView.setAt" }AddedVertex { vertex_id: "space.highport.defs#defaultTileView.uri" }AddedVertex { vertex_id: "space.highport.defs#delegationState" }AddedVertex { vertex_id: "space.highport.defs#delegationView" }AddedVertex { vertex_id: "space.highport.defs#delegationView.certMode" }AddedVertex { vertex_id: "space.highport.defs#delegationView.challengeTarget" }AddedVertex { vertex_id: "space.highport.defs#delegationView.defaultTile" }AddedVertex { vertex_id: "space.highport.defs#delegationView.grantedAt" }AddedVertex { vertex_id: "space.highport.defs#delegationView.maxNames" }AddedVertex { vertex_id: "space.highport.defs#delegationView.probeHostname" }AddedVertex { vertex_id: "space.highport.defs#delegationView.state" }AddedVertex { vertex_id: "space.highport.defs#delegationView.wildcardObservedAt" }AddedVertex { vertex_id: "space.highport.defs#domainView.delegatedBase" }AddedVertex { vertex_id: "space.highport.defs#domainView.delegation" }
Constraint Changes
- ConstraintTightened ConstraintTightened { vertex_id: "space.highport.defs#edgeReachStatus", sort: "knownValues", old_value: "[\"unknown\",\"routed\",\"foreign\",\"unreachable\"]", new_value: "[\"unknown\",\"routed\",\"foreign\",\"unreachable\",\"other-deployment\",\"unproven\"]" }
- ConstraintTightened ConstraintTightened { vertex_id: "space.highport.defs#verificationCheck.name", sort: "knownValues", old_value: "[\"ownership\",\"traffic\",\"conflict\"]", new_value: "[\"ownership\",\"traffic\",\"conflict\",\"certificate\"]" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "space.highport.defs#delegationView", src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.certMode", kind: "prop", name: Some("certMode") }
- Breaking: RequiredEdgeAdded { vertex_id: "space.highport.defs#defaultTileView", src: "space.highport.defs#defaultTileView", tgt: "space.highport.defs#defaultTileView.uri", kind: "prop", name: Some("uri") }
- Breaking: RequiredEdgeAdded { vertex_id: "space.highport.defs#defaultTileView", src: "space.highport.defs#defaultTileView", tgt: "space.highport.defs#defaultTileView.cid", kind: "prop", name: Some("cid") }
- Non-breaking: AddedEdge { src: "space.highport.defs#defaultTileView", tgt: "space.highport.defs#defaultTileView.appliedTo", kind: "prop", name: Some("appliedTo") }
- Non-breaking: AddedEdge { src: "space.highport.defs#defaultTileView", tgt: "space.highport.defs#defaultTileView.name", kind: "prop", name: Some("name") }
- Non-breaking: AddedEdge { src: "space.highport.defs#defaultTileView", tgt: "space.highport.defs#defaultTileView.setAt", kind: "prop", name: Some("setAt") }
- Non-breaking: AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.challengeTarget", kind: "prop", name: Some("challengeTarget") }
- Non-breaking: AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.defaultTile", kind: "prop", name: Some("defaultTile") }
- Non-breaking: AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.grantedAt", kind: "prop", name: Some("grantedAt") }
- Non-breaking: AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.maxNames", kind: "prop", name: Some("maxNames") }
- Non-breaking: AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.probeHostname", kind: "prop", name: Some("probeHostname") }
- Non-breaking: AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.state", kind: "prop", name: Some("state") }
- Non-breaking: AddedEdge { src: "space.highport.defs#delegationView", tgt: "space.highport.defs#delegationView.wildcardObservedAt", kind: "prop", name: Some("wildcardObservedAt") }
- Non-breaking: AddedEdge { src: "space.highport.defs#delegationView.defaultTile", tgt: "space.highport.defs#defaultTileView", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "space.highport.defs#delegationView.state", tgt: "space.highport.defs#delegationState", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "space.highport.defs#domainView", tgt: "space.highport.defs#domainView.delegatedBase", kind: "prop", name: Some("delegatedBase") }
- Non-breaking: AddedEdge { src: "space.highport.defs#domainView", tgt: "space.highport.defs#domainView.delegation", kind: "prop", name: Some("delegation") }
- Non-breaking: AddedEdge { src: "space.highport.defs#domainView.delegation", tgt: "space.highport.defs#delegationView", kind: "ref", name: None }
1
1
{
2
2
"id": "space.highport.defs",
3
3
"defs": {
4
4
"jobView": {
5
5
"type": "object",
6
6
"required": [
7
7
"id",
8
8
"uri",
9
9
"action",
10
10
"state",
11
11
"attempts",
12
12
"scheduledAt"
13
13
],
14
14
"properties": {
15
15
"id": {
16
16
"type": "integer"
17
17
},
18
18
"uri": {
19
19
"type": "string"
20
20
},
21
21
"state": {
22
22
"type": "string"
23
23
},
24
24
"action": {
25
25
"type": "string"
26
26
},
27
27
"attempts": {
28
28
"type": "integer"
29
29
},
30
30
"lastError": {
31
31
"type": "string"
32
32
},
33
33
"startedAt": {
34
34
"type": "string",
35
35
"format": "datetime"
36
36
},
37
37
"finishedAt": {
38
38
"type": "string",
39
39
"format": "datetime"
40
40
},
41
41
"scheduledAt": {
42
42
"type": "string",
43
43
"format": "datetime"
44
44
}
45
45
}
46
46
},
47
47
"tlsView": {
48
48
"type": "object",
49
49
"required": [
50
50
"status"
51
51
],
52
52
"properties": {
53
53
"status": {
54
54
"ref": "#tlsStatus",
55
55
"type": "ref"
56
56
},
57
57
"issuedAt": {
58
58
"type": "string",
59
59
"format": "datetime"
60
60
},
61
61
"expiresAt": {
62
62
"type": "string",
63
63
"format": "datetime"
64
64
},
65
65
"lastError": {
66
66
"type": "string"
67
67
}
68
68
}
69
69
},
70
70
"siteView": {
71
71
"type": "object",
72
72
"required": [
73
73
"domain",
74
74
"did",
75
75
"uri",
76
76
"cid",
77
77
"rev",
78
78
"activatedAt",
79
79
"sourceKind"
80
80
],
81
81
"properties": {
82
82
"cid": {
83
83
"type": "string",
84
84
"format": "cid"
85
85
},
86
86
"did": {
87
87
"type": "string",
88
88
"format": "did"
89
89
},
90
90
"rev": {
91
91
"type": "string"
92
92
},
93
93
"uri": {
94
94
"type": "string",
95
95
"format": "at-uri"
96
96
},
97
97
"tile": {
98
98
"ref": "#tileView",
99
99
"type": "ref"
100
100
},
101
101
"space": {
102
102
"type": "string",
103
103
"format": "at-uri",
104
-
"description": "Present for a site published from a space; attribution survives the plane."
104
+
"description": "Present for a site published from a space."
105
105
},
106
106
"domain": {
107
107
"type": "string"
108
108
},
109
109
"sourceKind": {
110
110
"type": "string",
111
111
"knownValues": [
112
112
"inline",
113
113
"tile"
114
114
]
115
115
},
116
116
"activatedAt": {
117
117
"type": "string",
118
118
"format": "datetime"
119
119
}
120
120
}
121
121
},
122
122
"tileView": {
123
123
"type": "object",
124
124
"required": [
125
125
"uri",
126
126
"cid",
127
127
"did",
128
128
"name",
129
129
"state",
130
130
"indexedAt"
131
131
],
132
132
"properties": {
133
133
"cid": {
134
134
"type": "string",
135
135
"format": "cid"
136
136
},
137
137
"did": {
138
138
"type": "string",
139
139
"format": "did"
140
140
},
141
141
"uri": {
142
142
"type": "string",
143
143
"format": "at-uri"
144
144
},
145
145
"name": {
146
146
"type": "string"
147
147
},
148
148
"space": {
149
149
"type": "string",
150
150
"format": "at-uri",
151
-
"description": "Present for a space tile; never on the public surface."
151
+
"description": "Present for a space tile. Never shown on the public surface."
152
152
},
153
153
"state": {
154
154
"type": "string",
155
155
"knownValues": [
156
156
"indexing",
157
157
"ready",
158
158
"incomplete",
159
159
"rejected",
160
160
"suspended",
161
161
"deleted"
162
162
]
163
163
},
164
164
"handle": {
165
165
"type": "string",
166
166
"format": "handle",
167
-
"description": "The author's handle, present only when it resolves back to did. Absent is normal and not an error: a handle that has just changed, or one whose DNS is unreachable, is reported as absent rather than as a claim, and clients show did instead."
167
+
"description": "The author's handle, present only if it resolves back to did. Often absent, for example right after a handle change or when DNS is unreachable. Show did instead."
168
168
},
169
169
"params": {
170
170
"type": "array",
171
171
"items": {
172
172
"ref": "space.highport.sites.tile#param",
173
173
"type": "ref"
174
174
}
175
175
},
176
176
"iconUrl": {
177
177
"type": "string",
178
178
"format": "uri",
179
179
"description": "https://highport.space/xrpc/space.highport.sites.getTileIcon?cid={cid}; absent if the tile has no icon."
180
180
},
181
181
"indexedAt": {
182
182
"type": "string",
183
183
"format": "datetime"
184
184
},
185
185
"latestCid": {
186
186
"type": "string",
187
187
"format": "cid",
188
188
"description": "The newest indexed version at this URI, when it differs from cid."
189
189
},
190
190
"entryCount": {
191
191
"type": "integer"
192
192
},
193
193
"totalBytes": {
194
194
"type": "integer"
195
195
},
196
196
"description": {
197
197
"type": "string"
198
198
}
199
199
}
200
200
},
201
201
"spaceView": {
202
202
"type": "object",
203
203
"required": [
204
204
"uri",
205
205
"authority",
206
206
"skey",
207
207
"syncState",
208
208
"connectedAt"
209
209
],
210
210
"properties": {
211
211
"uri": {
212
212
"type": "string",
213
213
"format": "at-uri"
214
214
},
215
215
"skey": {
216
216
"type": "string"
217
217
},
218
218
"policy": {
219
219
"type": "string",
220
220
"knownValues": [
221
221
"public",
222
222
"member-list",
223
223
"managing-app",
224
224
"unknown"
225
225
]
226
226
},
227
227
"headRev": {
228
228
"type": "string"
229
229
},
230
230
"appAccess": {
231
231
"type": "string",
232
232
"knownValues": [
233
233
"open",
234
234
"allow-list",
235
235
"unknown"
236
236
]
237
237
},
238
238
"authority": {
239
239
"type": "string",
240
240
"format": "did"
241
241
},
242
242
"syncState": {
243
243
"ref": "#spaceSyncState",
244
244
"type": "ref"
245
245
},
246
246
"tileCount": {
247
247
"type": "integer"
248
248
},
249
249
"connectedAt": {
250
250
"type": "string",
251
251
"format": "datetime"
252
252
},
253
253
"domainCount": {
254
254
"type": "integer"
255
255
},
256
256
"lastCheckedAt": {
257
257
"type": "string",
258
258
"format": "datetime"
259
259
},
260
260
"lastNotifiedAt": {
261
261
"type": "string",
262
262
"format": "datetime"
263
263
},
264
264
"accessExpiresAt": {
265
265
"type": "string",
266
266
"format": "datetime",
267
-
"description": "When bard's current space credential expires; absent when bard holds none."
267
+
"description": "When bard's current credential for the space expires. Absent if bard holds none."
268
268
},
269
269
"accessGrantedBy": {
270
270
"type": "string",
271
271
"format": "did"
272
272
},
273
273
"queuedNotifications": {
274
274
"type": "integer",
275
-
"description": "Receipts waiting for a credential."
275
+
"description": "Notification receipts waiting for a credential."
276
276
},
277
277
"registrationExpiresAt": {
278
278
"type": "string",
279
279
"format": "datetime"
280
280
}
281
281
}
282
282
},
283
283
"tlsStatus": {
284
284
"type": "string",
285
285
"knownValues": [
286
286
"none",
287
287
"pending",
288
288
"issued",
289
289
"renewing",
290
290
"failed"
291
291
]
292
292
},
293
293
"domainView": {
294
294
"type": "object",
295
295
"required": [
296
296
"domain",
297
297
"did",
298
298
"status",
299
299
"createdAt"
300
300
],
301
301
"properties": {
302
302
"did": {
303
303
"type": "string",
304
304
"format": "did"
305
305
},
306
306
"tls": {
307
307
"ref": "#tlsStatus",
308
308
"type": "ref"
309
309
},
310
310
"space": {
311
311
"type": "string",
312
312
"format": "at-uri",
313
-
"description": "The space the domain is registered to; absent for a DID-registered domain. The serving record is the space authority's."
313
+
"description": "The space the domain is registered to. Absent for a domain registered to a DID. The record served is the space authority's."
314
314
},
315
315
"domain": {
316
316
"type": "string"
317
317
},
318
318
"status": {
319
319
"ref": "#domainStatus",
320
320
"type": "ref"
321
321
},
322
322
"tileCid": {
323
323
"type": "string",
324
324
"format": "cid"
325
325
},
326
326
"tileUri": {
327
327
"type": "string",
328
328
"format": "at-uri"
329
329
},
330
330
"activeCid": {
331
331
"type": "string",
332
332
"format": "cid"
333
333
},
334
334
"activeRev": {
335
335
"type": "string"
336
336
},
337
337
"activeUri": {
338
338
"type": "string",
339
339
"format": "at-uri"
340
340
},
341
341
"createdAt": {
342
342
"type": "string",
343
343
"format": "datetime"
344
344
},
345
+
"delegation": {
346
+
"ref": "#delegationView",
347
+
"type": "ref",
348
+
"description": "For a base: what its owner has enabled and granted. Absent on any other domain."
349
+
},
345
350
"entryCount": {
346
351
"type": "integer"
347
352
},
348
353
"pendingCid": {
349
354
"type": "string",
350
355
"format": "cid",
351
-
"description": "A validated, prepared record awaiting its commit, if any."
356
+
"description": "A validated record waiting to be committed, if there is one."
352
357
},
353
358
"sourceKind": {
354
359
"type": "string",
355
360
"knownValues": [
356
361
"inline",
357
362
"tile"
358
363
]
359
364
},
360
365
"totalBytes": {
361
366
"type": "integer"
362
367
},
363
368
"verifiedAt": {
364
369
"type": "string",
365
370
"format": "datetime"
366
371
},
367
372
"activatedAt": {
368
373
"type": "string",
369
374
"format": "datetime"
370
375
},
371
376
"pendingState": {
372
377
"type": "string",
373
378
"knownValues": [
374
379
"preparing",
375
380
"pending-publication"
376
381
]
382
+
},
383
+
"delegatedBase": {
384
+
"type": "string",
385
+
"description": "For a name reserved under a delegation base: that base. In this case did is the identity the name was reserved for, not the base's owner."
377
386
}
378
387
}
379
388
},
380
389
"indexState": {
381
390
"type": "string",
382
391
"knownValues": [
383
392
"preparing",
384
393
"pending-publication",
385
394
"expired",
386
395
"queued",
387
396
"fetching",
388
397
"materializing",
389
398
"active",
390
399
"superseded",
391
400
"rejected",
392
401
"failed"
393
402
]
394
403
},
395
404
"spaceEvent": {
396
405
"type": "object",
397
406
"required": [
398
407
"seq",
399
408
"space",
400
409
"kind",
401
410
"at"
402
411
],
403
412
"properties": {
404
413
"at": {
405
414
"type": "string",
406
415
"format": "datetime"
407
416
},
408
417
"cid": {
409
418
"type": "string",
410
419
"format": "cid"
411
420
},
412
421
"seq": {
413
422
"type": "integer"
414
423
},
415
424
"kind": {
416
425
"type": "string",
417
426
"knownValues": [
418
427
"record.created",
419
428
"record.updated",
420
429
"record.deleted",
421
430
"site.activated",
422
431
"site.deactivated",
423
432
"tile.ready",
424
433
"tile.incomplete",
425
434
"tile.deleted",
426
435
"access.granted",
427
436
"access.expired",
428
437
"registration.renewed",
429
438
"registration.lapsed",
430
439
"app-not-allowed",
431
440
"space.deleted"
432
441
]
433
442
},
434
443
"actor": {
435
444
"type": "string",
436
445
"format": "did"
437
446
},
438
447
"space": {
439
448
"type": "string",
440
449
"format": "at-uri"
441
450
},
442
451
"subject": {
443
452
"type": "string"
444
453
}
445
454
}
446
455
},
447
456
"blobFailure": {
448
457
"type": "object",
449
458
"required": [
450
459
"cid",
451
460
"role",
452
461
"sourceDid",
453
462
"error"
454
463
],
455
464
"properties": {
456
465
"cid": {
457
466
"type": "string",
458
467
"format": "cid"
459
468
},
460
469
"role": {
461
470
"type": "string",
462
471
"knownValues": [
463
472
"manifest",
464
473
"tile",
465
474
"parameter",
466
475
"notFound"
467
476
]
468
477
},
469
478
"error": {
470
479
"type": "string",
471
-
"description": "BlobUnavailable, CidMismatch, FetchFailed."
480
+
"description": "One of BlobUnavailable, CidMismatch or FetchFailed."
472
481
},
473
482
"sourceDid": {
474
483
"type": "string",
475
484
"format": "did"
476
485
}
477
486
}
478
487
},
479
488
"domainEvent": {
480
489
"type": "object",
481
490
"required": [
482
491
"event",
483
492
"createdAt"
484
493
],
485
494
"properties": {
486
495
"actor": {
487
496
"type": "string"
488
497
},
489
498
"event": {
490
499
"type": "string"
491
500
},
492
501
"detail": {
493
502
"type": "unknown"
494
503
},
495
504
"createdAt": {
496
505
"type": "string",
497
506
"format": "datetime"
498
507
}
499
508
}
500
509
},
501
510
"missingBlob": {
502
511
"type": "object",
503
512
"required": [
504
513
"cid",
505
514
"role",
506
515
"sourceDid"
507
516
],
508
517
"properties": {
509
518
"cid": {
510
519
"type": "string",
511
520
"format": "cid"
512
521
},
513
522
"role": {
514
523
"type": "string",
515
524
"knownValues": [
516
525
"manifest",
517
526
"tile",
518
527
"parameter",
519
528
"notFound"
520
529
]
521
530
},
522
531
"sourceDid": {
523
532
"type": "string",
524
533
"format": "did"
525
534
}
526
535
}
527
536
},
528
537
"domainStatus": {
529
538
"type": "string",
530
539
"knownValues": [
531
540
"pending",
532
541
"verifying",
533
542
"verified",
534
543
"active",
535
544
"failed",
536
545
"suspended",
537
546
"released"
538
547
]
539
548
},
540
549
"denylistEntry": {
541
550
"type": "object",
542
551
"required": [
543
552
"subject",
544
553
"kind",
545
554
"createdAt"
546
555
],
547
556
"properties": {
548
557
"kind": {
549
558
"type": "string",
550
559
"knownValues": [
551
560
"domain",
552
561
"did",
553
562
"uri",
554
563
"cid",
555
564
"pattern",
556
565
"space"
557
566
]
558
567
},
559
568
"actor": {
560
569
"type": "string"
561
570
},
562
571
"reason": {
563
572
"type": "string"
564
573
},
565
574
"subject": {
566
575
"type": "string"
567
576
},
568
577
"createdAt": {
569
578
"type": "string",
570
579
"format": "datetime"
571
580
}
572
581
}
573
582
},
583
+
"delegationView": {
584
+
"type": "object",
585
+
"required": [
586
+
"certMode"
587
+
],
588
+
"properties": {
589
+
"state": {
590
+
"ref": "#delegationState",
591
+
"type": "ref",
592
+
"description": "Absent if the base has not enabled delegation."
593
+
},
594
+
"certMode": {
595
+
"type": "string",
596
+
"description": "How names under the base get certificates. Every base starts as per-name.",
597
+
"knownValues": [
598
+
"per-name",
599
+
"wildcard"
600
+
]
601
+
},
602
+
"maxNames": {
603
+
"type": "integer",
604
+
"description": "The most names the base can reserve."
605
+
},
606
+
"grantedAt": {
607
+
"type": "string",
608
+
"format": "datetime",
609
+
"description": "When the live wildcard grant was made."
610
+
},
611
+
"defaultTile": {
612
+
"ref": "#defaultTileView",
613
+
"type": "ref",
614
+
"description": "The tile served on names under this base whose subject has not published a site. Absent when the base has set none."
615
+
},
616
+
"probeHostname": {
617
+
"type": "string",
618
+
"maxLength": 253,
619
+
"description": "A random name under the base, used to prove the wildcard routes."
620
+
},
621
+
"challengeTarget": {
622
+
"type": "string",
623
+
"description": "Where the base's _acme-challenge CNAME must point, exactly as the certificate issuer writes it. Present only while a wildcard grant is live."
624
+
},
625
+
"wildcardObservedAt": {
626
+
"type": "string",
627
+
"format": "datetime",
628
+
"description": "When the base's wildcard certificate first appeared in certificate storage."
629
+
}
630
+
},
631
+
"description": "What a base's owner has enabled and granted. Fields other than certMode are absent when they do not apply."
632
+
},
574
633
"dnsInstruction": {
575
634
"type": "object",
576
635
"required": [
577
636
"type",
578
637
"name",
579
638
"value"
580
639
],
581
640
"properties": {
582
641
"ttl": {
583
642
"type": "integer"
584
643
},
585
644
"name": {
586
645
"type": "string",
587
646
"description": "Fully-qualified record name."
588
647
},
589
648
"type": {
590
649
"type": "string",
591
650
"knownValues": [
592
651
"TXT",
593
652
"CNAME",
594
653
"ALIAS",
595
654
"ANAME",
596
655
"A",
597
656
"AAAA"
598
657
]
599
658
},
600
659
"value": {
601
660
"type": "string"
602
661
},
603
662
"purpose": {
604
663
"type": "string",
605
664
"knownValues": [
606
665
"ownership",
607
666
"certificate",
608
667
"traffic"
609
668
]
610
669
},
611
670
"required": {
612
671
"type": "boolean"
613
672
}
614
673
}
615
674
},
616
675
"malwareFinding": {
617
676
"type": "object",
618
677
"required": [
619
678
"id",
620
679
"cid",
621
680
"signature",
622
681
"class",
623
682
"source",
624
683
"foundAt"
625
684
],
626
685
"properties": {
627
686
"id": {
628
687
"type": "integer",
629
-
"description": "The finding's row id, which the denylist entry's reason names."
688
+
"description": "The finding's ID. The matching denylist entry's reason refers to it."
630
689
},
631
690
"cid": {
632
691
"type": "string",
633
-
"description": "The content address. `-` for a detection at upload, where nothing was stored."
692
+
"description": "The content address, or `-` for a detection at upload, when nothing was stored."
634
693
},
635
694
"did": {
636
695
"type": "string",
637
696
"format": "did",
638
-
"description": "The repository the bytes were fetched from โ for a tile resource the tile's author, not the site owner. Absent for content bard authored."
697
+
"description": "The repository the bytes came from. For a tile resource, that is the tile's author, not the site owner. Absent for content bard authored."
639
698
},
640
699
"uri": {
641
700
"type": "string",
642
701
"format": "at-uri",
643
-
"description": "The record that referenced it."
702
+
"description": "The record that referenced the content."
644
703
},
645
704
"path": {
646
705
"type": "string",
647
-
"description": "The manifest key the bytes were mapped at โ the field that answers which file. Absent where there is no key: the notFound resource, an upload refused before any record referenced it, and a rescan, which starts from a CID."
706
+
"description": "The manifest path the bytes were mapped to, which identifies the file. Absent when there is no path: the notFound resource, an upload refused before any record referenced it, or a rescan."
648
707
},
649
708
"class": {
650
709
"type": "string",
651
-
"description": "`unwanted` is a PUA match and stops short of the publishing identity under the default policy.",
710
+
"description": "`unwanted` is a PUA match. Under the default policy, the response stops short of the publishing identity.",
652
711
"knownValues": [
653
712
"malware",
654
713
"unwanted"
655
714
]
656
715
},
657
716
"domain": {
658
717
"type": "string",
659
-
"description": "The hostname it would have served at."
718
+
"description": "The hostname the content would have been served at."
660
719
},
661
720
"source": {
662
721
"type": "string",
663
-
"description": "Where it was found. `rescan` means the content was clean when it arrived and a signature has caught up with it; `admin` means an operator asked about this CID rather than the sweep reaching it.",
722
+
"description": "Where the detection happened. `rescan`: the content was clean on arrival and a newer signature caught it. `admin`: an operator asked for this CID to be scanned.",
664
723
"knownValues": [
665
724
"fetch",
666
725
"upload",
667
726
"rescan",
668
727
"admin"
669
728
]
670
729
},
671
730
"foundAt": {
672
731
"type": "string",
673
732
"format": "datetime"
674
733
},
675
734
"signature": {
676
735
"type": "string",
677
-
"description": "The signature name, verbatim from the engine."
736
+
"description": "The signature name, exactly as the scanner reported it."
678
737
},
679
738
"quarantinedAt": {
680
739
"type": "string",
681
740
"format": "datetime",
682
-
"description": "When the response finished. Absent means it has not: the content is denied and may still be served."
741
+
"description": "When the response finished. Absent while it is still underway: the content is denied but may still be served."
683
742
}
684
743
},
685
-
"description": "One malware detection. Written before anything is denied or deleted, because the quarantine destroys the sample and nothing after that can re-derive why."
744
+
"description": "One malware detection. It is recorded before anything is denied or deleted, because quarantine destroys the sample."
686
745
},
687
746
"spaceSyncState": {
688
747
"type": "string",
689
748
"knownValues": [
690
749
"connecting",
691
750
"syncing",
692
751
"synced",
693
752
"credential-expired",
694
753
"registration-lapsed",
695
754
"app-not-allowed",
696
755
"authority-unreachable",
697
756
"deleted",
698
757
"disconnected"
699
758
]
700
759
},
760
+
"defaultTileView": {
761
+
"type": "object",
762
+
"required": [
763
+
"uri",
764
+
"cid"
765
+
],
766
+
"properties": {
767
+
"cid": {
768
+
"type": "string",
769
+
"format": "cid",
770
+
"description": "The pinned version."
771
+
},
772
+
"uri": {
773
+
"type": "string",
774
+
"format": "at-uri",
775
+
"description": "The tile record's AT-URI."
776
+
},
777
+
"name": {
778
+
"type": "string",
779
+
"description": "The tile's declared name, as it was when this was read."
780
+
},
781
+
"setAt": {
782
+
"type": "string",
783
+
"format": "datetime",
784
+
"description": "When the base owner bound it."
785
+
},
786
+
"appliedTo": {
787
+
"type": "integer",
788
+
"description": "How many names under the base are serving it now. Names whose subject has published their own site are not counted."
789
+
}
790
+
},
791
+
"description": "A base's default tile: what unclaimed names under it serve. The binding pins a CID, so a later version of the tile does not change what they serve."
792
+
},
793
+
"delegationState": {
794
+
"type": "string",
795
+
"description": "Where a base's delegation stands. probing: the wildcard has not been shown to route yet. enabled: it has. routing-lapsed: the wildcard stopped routing for longer than the grace period, and names under the base are suspended until it routes again.",
796
+
"knownValues": [
797
+
"probing",
798
+
"enabled",
799
+
"routing-lapsed"
800
+
]
801
+
},
701
802
"edgeReachStatus": {
702
803
"type": "string",
703
-
"description": "Whether bard's edge routes a serving hostname to bard. unknown means no probe has been made and must never be read as a fault; routed means the probe reached bard-origin; foreign means something else answered for the hostname; unreachable means nothing answered at all.",
804
+
"description": "Whether bard's edge routes a serving hostname to this deployment. unknown: not probed yet, which is not a fault. routed: the probe reached this deployment's bard-origin. foreign: something else answered. unreachable: nothing answered. other-deployment: a different bard deployment answered. unproven: the answer looked like this deployment's but failed the reachability challenge, so something may be imitating it.",
704
805
"knownValues": [
705
806
"unknown",
706
807
"routed",
707
808
"foreign",
708
-
"unreachable"
809
+
"unreachable",
810
+
"other-deployment",
811
+
"unproven"
709
812
]
710
813
},
711
814
"validationError": {
712
815
"type": "object",
713
816
"required": [
714
817
"name",
715
818
"message"
716
819
],
717
820
"properties": {
718
821
"name": {
719
822
"type": "string",
720
-
"description": "A DESIGN.md ยง3.8 error name, e.g. DuplicatePath, RedirectTargetNotFound, ParameterTypeMismatch."
823
+
"description": "A validation error name, such as DuplicatePath, RedirectTargetNotFound or ParameterTypeMismatch."
721
824
},
722
825
"path": {
723
826
"type": "string",
724
-
"description": "JSON Pointer into the record, when the error concerns one field or entry."
827
+
"description": "JSON Pointer to the field or entry the error is about, if there is one."
725
828
},
726
829
"message": {
727
830
"type": "string"
728
831
}
729
832
}
730
833
},
731
834
"edgeReachability": {
732
835
"type": "object",
733
836
"required": [
734
837
"status",
735
838
"domain"
736
839
],
737
840
"properties": {
738
841
"detail": {
739
842
"type": "string",
740
-
"description": "What answered, for a person: a status line, or a transport error. Diagnostic only; nothing branches on it."
843
+
"description": "What answered, as a status line or a transport error. Meant for people; do not branch on it."
741
844
},
742
845
"domain": {
743
846
"type": "string",
744
847
"maxLength": 253,
745
-
"description": "The hostname that was probed, so a reader is told which name is not arriving."
848
+
"description": "The hostname that was probed."
746
849
},
747
850
"status": {
748
851
"ref": "#edgeReachStatus",
749
852
"type": "ref"
750
853
},
751
854
"checkedAt": {
752
855
"type": "string",
753
856
"format": "datetime",
754
857
"description": "When the probe was made. Absent when status is unknown."
755
858
}
756
859
},
757
-
"description": "What the deployment's own edge answered for a hostname, measured over the network rather than read from edge configuration. A site can be indexed and activated while the edge has nowhere to send its hostname, and this is the only field that says so."
860
+
"description": "What this deployment's edge answered for a hostname, probed over the network. A site can be indexed and active while the edge has nowhere to send it, and only this field shows that."
758
861
},
759
862
"verificationView": {
760
863
"type": "object",
761
864
"required": [
762
865
"status",
763
866
"checks"
764
867
],
765
868
"properties": {
766
869
"checks": {
767
870
"type": "array",
768
871
"items": {
769
872
"ref": "#verificationCheck",
770
873
"type": "ref"
771
874
}
772
875
},
773
876
"status": {
774
877
"ref": "#domainStatus",
775
878
"type": "ref"
776
879
},
777
880
"lastCheckedAt": {
778
881
"type": "string",
779
882
"format": "datetime"
780
883
}
781
884
}
782
885
},
783
886
"preparationStatus": {
784
887
"type": "object",
785
888
"required": [
786
889
"state",
787
890
"cid",
788
891
"fetched",
789
892
"pending",
790
893
"failed"
791
894
],
792
895
"properties": {
793
896
"cid": {
794
897
"type": "string",
795
898
"format": "cid"
796
899
},
797
900
"state": {
798
901
"type": "string",
799
902
"knownValues": [
800
903
"preparing",
801
904
"pending-publication",
802
905
"expired"
803
906
]
804
907
},
805
908
"failed": {
806
909
"type": "array",
807
910
"items": {
808
911
"ref": "#blobFailure",
809
912
"type": "ref"
810
913
}
811
914
},
812
915
"fetched": {
813
916
"type": "integer"
814
917
},
815
918
"pending": {
816
919
"type": "integer"
817
920
},
818
921
"expiresAt": {
819
922
"type": "string",
820
923
"format": "datetime"
821
924
}
822
925
}
823
926
},
824
927
"verificationCheck": {
825
928
"type": "object",
826
929
"required": [
827
930
"name",
828
931
"passed",
829
932
"checkedAt"
830
933
],
831
934
"properties": {
832
935
"name": {
833
936
"type": "string",
834
937
"knownValues": [
835
938
"ownership",
836
939
"traffic",
837
-
"conflict"
940
+
"conflict",
941
+
"certificate"
838
942
]
839
943
},
840
944
"detail": {
841
945
"type": "string"
842
946
},
843
947
"passed": {
844
948
"type": "boolean"
845
949
},
846
950
"checkedAt": {
847
951
"type": "string",
848
952
"format": "datetime"
849
953
}
850
954
}
851
955
}
852
956
},
853
957
"$type": "com.atproto.lexicon.schema",
854
958
"lexicon": 1
855
959
}