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