io.atcr.hold.captain
Schema Diff
+13 -5
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 6 non-breaking changes.
Breaking Changes (2)
- RemovedVertex RemovedVertex { vertex_id: "io.atcr.hold.captain:body.provider" }
- RemovedEdge RemovedEdge { src: "io.atcr.hold.captain:body", tgt: "io.atcr.hold.captain:body.provider", kind: "prop", name: Some("provider") }
Non-Breaking Changes (6)
- AddedVertex AddedVertex { vertex_id: "io.atcr.hold.captain:body.successor" }
- AddedVertex AddedVertex { vertex_id: "io.atcr.hold.captain:body.supporterBadgeTiers" }
- AddedVertex AddedVertex { vertex_id: "io.atcr.hold.captain:body.supporterBadgeTiers:items" }
- AddedEdge AddedEdge { src: "io.atcr.hold.captain:body", tgt: "io.atcr.hold.captain:body.successor", kind: "prop", name: Some("successor") }
- AddedEdge AddedEdge { src: "io.atcr.hold.captain:body", tgt: "io.atcr.hold.captain:body.supporterBadgeTiers", kind: "prop", name: Some("supporterBadgeTiers") }
- AddedEdge AddedEdge { src: "io.atcr.hold.captain:body.supporterBadgeTiers", tgt: "io.atcr.hold.captain:body.supporterBadgeTiers:items", kind: "items", name: None }
Migration Guidance
Removed Elements
RemovedVertex { vertex_id: "io.atcr.hold.captain:body.provider" }
Added Elements
AddedVertex { vertex_id: "io.atcr.hold.captain:body.successor" }AddedVertex { vertex_id: "io.atcr.hold.captain:body.supporterBadgeTiers" }AddedVertex { vertex_id: "io.atcr.hold.captain:body.supporterBadgeTiers:items" }
Additional Notes
- Breaking: RemovedEdge { src: "io.atcr.hold.captain:body", tgt: "io.atcr.hold.captain:body.provider", kind: "prop", name: Some("provider") }
- Non-breaking: AddedEdge { src: "io.atcr.hold.captain:body", tgt: "io.atcr.hold.captain:body.successor", kind: "prop", name: Some("successor") }
- Non-breaking: AddedEdge { src: "io.atcr.hold.captain:body", tgt: "io.atcr.hold.captain:body.supporterBadgeTiers", kind: "prop", name: Some("supporterBadgeTiers") }
- Non-breaking: AddedEdge { src: "io.atcr.hold.captain:body.supporterBadgeTiers", tgt: "io.atcr.hold.captain:body.supporterBadgeTiers:items", kind: "items", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"description": "Represents the hold's ownership and metadata. Stored as a singleton record at rkey 'self' in the hold's embedded PDS.",
6
6
"key": "literal:self",
7
7
"record": {
8
8
"properties": {
9
9
"allowAllCrew": {
10
10
"description": "Allow any authenticated user to register as crew",
11
11
"type": "boolean"
12
12
},
13
13
"deployedAt": {
14
14
"description": "RFC3339 timestamp of when the hold was deployed",
15
15
"format": "datetime",
16
16
"type": "string"
17
17
},
18
18
"enableBlueskyPosts": {
19
19
"description": "Enable Bluesky posts when manifests are pushed",
20
20
"type": "boolean"
21
21
},
22
22
"owner": {
23
23
"description": "DID of the hold owner",
24
24
"format": "did",
25
25
"type": "string"
26
26
},
27
-
"provider": {
28
-
"description": "Deployment provider (e.g., fly.io, aws, etc.)",
29
-
"maxLength": 64,
30
-
"type": "string"
31
-
},
32
27
"public": {
33
28
"description": "Whether this hold allows public blob reads (pulls) without authentication",
34
29
"type": "boolean"
35
30
},
36
31
"region": {
37
32
"description": "S3 region where blobs are stored",
38
33
"maxLength": 64,
39
34
"type": "string"
35
+
},
36
+
"successor": {
37
+
"description": "DID of successor hold for migration redirect",
38
+
"format": "did",
39
+
"type": "string"
40
+
},
41
+
"supporterBadgeTiers": {
42
+
"description": "Tier names that earn a supporter badge on user profiles",
43
+
"items": {
44
+
"maxLength": 64,
45
+
"type": "string"
46
+
},
47
+
"type": "array"
40
48
}
41
49
},
42
50
"required": [
43
51
"owner",
44
52
"public",
45
53
"allowAllCrew",
46
54
"enableBlueskyPosts",
47
55
"deployedAt"
48
56
],
49
57
"type": "object"
50
58
},
51
59
"type": "record"
52
60
}
53
61
},
54
62
"id": "io.atcr.hold.captain",
55
63
"lexicon": 1
56
64
}