ch.indiemusi.alpha.recording

indiemusi.ch

Schema Diff

+12 -6

From

CID
bafyreicsujnspxz...
Indexed At
2026-08-30 15:56 UTC
View this version

To

CID
bafyreiaxyygcxer...
Indexed At
2026-08-30 17:52 UTC
View this version

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
}

Compare Other Versions

Lexicon Garden

@