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