io.atcr.hold.captain
Schema Diff
+3 -3
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 3 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 (3)
- AddedVertex AddedVertex { vertex_id: "io.atcr.hold.captain:body.successor" }
- AddedEdge AddedEdge { src: "io.atcr.hold.captain:body", tgt: "io.atcr.hold.captain:body.successor", kind: "prop", name: Some("successor") }
- 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" }
Constraint Changes
- 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") }
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
48
}
49
49
}
50
50
},
51
51
"description": "Represents the hold's ownership and metadata. Stored as a singleton record at rkey 'self' in the hold's embedded PDS."
52
52
}
53
53
},
54
54
"$type": "com.atproto.lexicon.schema",
55
55
"lexicon": 1
56
56
}