ch.indiemusi.alpha.recording
Schema Diff
+34 -1
Compatibility Analysis
Breaking Changes Detected
5 breaking changes, 7 non-breaking changes.
Breaking Changes (5)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "ch.indiemusi.alpha.recording#audioFileRef", src: "ch.indiemusi.alpha.recording#audioFileRef", tgt: "ch.indiemusi.alpha.recording#audioFileRef.rkey", kind: "prop", name: Some("rkey") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "ch.indiemusi.alpha.recording#audioFileRef", src: "ch.indiemusi.alpha.recording#audioFileRef", tgt: "ch.indiemusi.alpha.recording#audioFileRef.ownerDid", kind: "prop", name: Some("ownerDid") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "ch.indiemusi.alpha.recording#audioFileRef", src: "ch.indiemusi.alpha.recording#audioFileRef", tgt: "ch.indiemusi.alpha.recording#audioFileRef.spaceSkey", kind: "prop", name: Some("spaceSkey") }
- KindChanged KindChanged { vertex_id: "ch.indiemusi.alpha.recording:body.audioFile", old_kind: "blob", new_kind: "ref" }
- ConstraintAdded ConstraintAdded { vertex_id: "ch.indiemusi.alpha.recording:body.audioFile", sort: "ref", value: "#audioFileRef" }
Non-Breaking Changes (7)
- AddedVertex AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioFileRef" }
- AddedVertex AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioFileRef.mimeType" }
- AddedVertex AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioFileRef.ownerDid" }
- AddedVertex AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioFileRef.rkey" }
- AddedVertex AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioFileRef.spaceSkey" }
- AddedEdge AddedEdge { src: "ch.indiemusi.alpha.recording#audioFileRef", tgt: "ch.indiemusi.alpha.recording#audioFileRef.mimeType", kind: "prop", name: Some("mimeType") }
- AddedEdge AddedEdge { src: "ch.indiemusi.alpha.recording:body.audioFile", tgt: "ch.indiemusi.alpha.recording#audioFileRef", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioFileRef" }AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioFileRef.mimeType" }AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioFileRef.ownerDid" }AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioFileRef.rkey" }AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioFileRef.spaceSkey" }
Constraint Changes
- ConstraintAdded ConstraintAdded { vertex_id: "ch.indiemusi.alpha.recording:body.audioFile", sort: "ref", value: "#audioFileRef" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "ch.indiemusi.alpha.recording#audioFileRef", src: "ch.indiemusi.alpha.recording#audioFileRef", tgt: "ch.indiemusi.alpha.recording#audioFileRef.rkey", kind: "prop", name: Some("rkey") }
- Breaking: RequiredEdgeAdded { vertex_id: "ch.indiemusi.alpha.recording#audioFileRef", src: "ch.indiemusi.alpha.recording#audioFileRef", tgt: "ch.indiemusi.alpha.recording#audioFileRef.ownerDid", kind: "prop", name: Some("ownerDid") }
- Breaking: RequiredEdgeAdded { vertex_id: "ch.indiemusi.alpha.recording#audioFileRef", src: "ch.indiemusi.alpha.recording#audioFileRef", tgt: "ch.indiemusi.alpha.recording#audioFileRef.spaceSkey", kind: "prop", name: Some("spaceSkey") }
- Breaking: KindChanged { vertex_id: "ch.indiemusi.alpha.recording:body.audioFile", old_kind: "blob", new_kind: "ref" }
- Non-breaking: AddedEdge { src: "ch.indiemusi.alpha.recording#audioFileRef", tgt: "ch.indiemusi.alpha.recording#audioFileRef.mimeType", kind: "prop", name: Some("mimeType") }
- Non-breaking: AddedEdge { src: "ch.indiemusi.alpha.recording:body.audioFile", tgt: "ch.indiemusi.alpha.recording#audioFileRef", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"artist": {
5
5
"description": "Information about an artist contributing to the recording",
6
6
"properties": {
7
7
"artist": {
8
8
"ref": "ch.indiemusi.alpha.actor.artist",
9
9
"type": "ref"
10
10
},
11
11
"did": {
12
12
"format": "did",
13
13
"type": "string"
14
14
},
15
15
"name": {
16
16
"maxLength": 255,
17
17
"type": "string"
18
18
}
19
19
},
20
20
"required": [
21
21
"name"
22
22
],
23
23
"type": "object"
24
24
},
25
+
"audioFileRef": {
26
+
"description": "Pointer to a ch.indiemusi.alpha.audioFile record in the owner's private space. Requires a space credential from the owner's PDS to retrieve the audio blob.",
27
+
"properties": {
28
+
"mimeType": {
29
+
"description": "MIME type hint, e.g. audio/flac. Allows display without fetching the space record.",
30
+
"maxLength": 127,
31
+
"type": "string"
32
+
},
33
+
"ownerDid": {
34
+
"description": "DID of the user whose space hosts the audio file record.",
35
+
"format": "did",
36
+
"type": "string"
37
+
},
38
+
"rkey": {
39
+
"description": "Record key of the ch.indiemusi.alpha.audioFile record within the space.",
40
+
"maxLength": 512,
41
+
"type": "string"
42
+
},
43
+
"spaceSkey": {
44
+
"description": "Space key of the ch.indiemusi.alpha.audioLibrary space holding this file. Corresponds to the rkey of the associated release record.",
45
+
"maxLength": 512,
46
+
"type": "string"
47
+
}
48
+
},
49
+
"required": [
50
+
"ownerDid",
51
+
"spaceSkey",
52
+
"rkey"
53
+
],
54
+
"type": "object"
55
+
},
25
56
"main": {
26
57
"description": "A recording of a song or musical work: the performance captured in a specific format",
27
58
"key": "tid",
28
59
"record": {
29
60
"properties": {
30
61
"artists": {
31
62
"items": {
32
63
"ref": "#artist",
33
64
"type": "ref"
34
65
},
35
66
"minLength": 1,
36
67
"type": "array"
37
68
},
38
69
"audioFile": {
39
-
"type": "blob"
70
+
"description": "Reference to the access-controlled audio file stored in the owner's atproto space.",
71
+
"ref": "#audioFileRef",
72
+
"type": "ref"
40
73
},
41
74
"duration": {
42
75
"description": "Duration of the recording in seconds",
43
76
"type": "integer"
44
77
},
45
78
"isrc": {
46
79
"description": "ISRC (International Standard Recording Code) with which the recording is registered",
47
80
"maxLength": 12,
48
81
"type": "string"
49
82
},
50
83
"masterOwner": {
51
84
"ref": "#masterOwnerInfo",
52
85
"type": "ref"
53
86
},
54
87
"song": {
55
88
"ref": "ch.indiemusi.alpha.song",
56
89
"type": "ref"
57
90
},
58
91
"title": {
59
92
"maxLength": 255,
60
93
"type": "string"
61
94
}
62
95
},
63
96
"required": [
64
97
"title",
65
98
"artists"
66
99
],
67
100
"type": "object"
68
101
},
69
102
"type": "record"
70
103
},
71
104
"masterOwnerInfo": {
72
105
"description": "Information about the master owner",
73
106
"properties": {
74
107
"did": {
75
108
"format": "did",
76
109
"type": "string"
77
110
},
78
111
"masterOwner": {
79
112
"ref": "ch.indiemusi.alpha.actor.masterOwner",
80
113
"type": "ref"
81
114
},
82
115
"name": {
83
116
"maxLength": 255,
84
117
"type": "string"
85
118
}
86
119
},
87
120
"type": "object"
88
121
}
89
122
},
90
123
"id": "ch.indiemusi.alpha.recording",
91
124
"lexicon": 1
92
125
}