space.highport.defs
Schema Diff
+128 -26
Compatibility Analysis
Breaking Changes Detected
4 breaking changes, 33 non-breaking changes.
Breaking Changes (4)
- 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\"]" }
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#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 this deployment. unknown means no probe has been made and must never be read as a fault; routed means the probe reached this deployment's bard-origin; foreign means something else answered for the hostname; unreachable means nothing answered at all; other-deployment means a bard origin belonging to a different deployment answered; unproven means the answer looked like this deployment's but could not answer the reachability challenge, so something may be imitating it.",
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
809
"unreachable",
709
810
"other-deployment",
710
811
"unproven"
711
812
]
712
813
},
713
814
"validationError": {
714
815
"type": "object",
715
816
"required": [
716
817
"name",
717
818
"message"
718
819
],
719
820
"properties": {
720
821
"name": {
721
822
"type": "string",
722
-
"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."
723
824
},
724
825
"path": {
725
826
"type": "string",
726
-
"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."
727
828
},
728
829
"message": {
729
830
"type": "string"
730
831
}
731
832
}
732
833
},
733
834
"edgeReachability": {
734
835
"type": "object",
735
836
"required": [
736
837
"status",
737
838
"domain"
738
839
],
739
840
"properties": {
740
841
"detail": {
741
842
"type": "string",
742
-
"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."
743
844
},
744
845
"domain": {
745
846
"type": "string",
746
847
"maxLength": 253,
747
-
"description": "The hostname that was probed, so a reader is told which name is not arriving."
848
+
"description": "The hostname that was probed."
748
849
},
749
850
"status": {
750
851
"ref": "#edgeReachStatus",
751
852
"type": "ref"
752
853
},
753
854
"checkedAt": {
754
855
"type": "string",
755
856
"format": "datetime",
756
857
"description": "When the probe was made. Absent when status is unknown."
757
858
}
758
859
},
759
-
"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."
760
861
},
761
862
"verificationView": {
762
863
"type": "object",
763
864
"required": [
764
865
"status",
765
866
"checks"
766
867
],
767
868
"properties": {
768
869
"checks": {
769
870
"type": "array",
770
871
"items": {
771
872
"ref": "#verificationCheck",
772
873
"type": "ref"
773
874
}
774
875
},
775
876
"status": {
776
877
"ref": "#domainStatus",
777
878
"type": "ref"
778
879
},
779
880
"lastCheckedAt": {
780
881
"type": "string",
781
882
"format": "datetime"
782
883
}
783
884
}
784
885
},
785
886
"preparationStatus": {
786
887
"type": "object",
787
888
"required": [
788
889
"state",
789
890
"cid",
790
891
"fetched",
791
892
"pending",
792
893
"failed"
793
894
],
794
895
"properties": {
795
896
"cid": {
796
897
"type": "string",
797
898
"format": "cid"
798
899
},
799
900
"state": {
800
901
"type": "string",
801
902
"knownValues": [
802
903
"preparing",
803
904
"pending-publication",
804
905
"expired"
805
906
]
806
907
},
807
908
"failed": {
808
909
"type": "array",
809
910
"items": {
810
911
"ref": "#blobFailure",
811
912
"type": "ref"
812
913
}
813
914
},
814
915
"fetched": {
815
916
"type": "integer"
816
917
},
817
918
"pending": {
818
919
"type": "integer"
819
920
},
820
921
"expiresAt": {
821
922
"type": "string",
822
923
"format": "datetime"
823
924
}
824
925
}
825
926
},
826
927
"verificationCheck": {
827
928
"type": "object",
828
929
"required": [
829
930
"name",
830
931
"passed",
831
932
"checkedAt"
832
933
],
833
934
"properties": {
834
935
"name": {
835
936
"type": "string",
836
937
"knownValues": [
837
938
"ownership",
838
939
"traffic",
839
-
"conflict"
940
+
"conflict",
941
+
"certificate"
840
942
]
841
943
},
842
944
"detail": {
843
945
"type": "string"
844
946
},
845
947
"passed": {
846
948
"type": "boolean"
847
949
},
848
950
"checkedAt": {
849
951
"type": "string",
850
952
"format": "datetime"
851
953
}
852
954
}
853
955
}
854
956
},
855
957
"$type": "com.atproto.lexicon.schema",
856
958
"lexicon": 1
857
959
}