ch.indiemusi.alpha.recording

indiemusi.ch

Schema Diff

+29 -2

From

CID
bafyreied5hc5cwd...
Indexed At
2026-07-26 20:11 UTC
View this version

To

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

Compatibility Analysis

Breaking Changes Detected

4 breaking changes, 8 non-breaking changes.

Breaking Changes (4)
  • RequiredEdgeAdded RequiredEdgeAdded { 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") }
  • RequiredEdgeAdded RequiredEdgeAdded { 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:body.audioFile" }
  • RemovedEdge RemovedEdge { src: "ch.indiemusi.alpha.recording:body", tgt: "ch.indiemusi.alpha.recording:body.audioFile", kind: "prop", name: Some("audioFile") }
Non-Breaking Changes (8)
  • AddedVertex AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioTrackRef" }
  • AddedVertex AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioTrackRef.mimeType" }
  • AddedVertex AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioTrackRef.ownerDid" }
  • AddedVertex AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioTrackRef.rkey" }
  • AddedVertex AddedVertex { vertex_id: "ch.indiemusi.alpha.recording:body.audioTrack" }
  • AddedEdge AddedEdge { src: "ch.indiemusi.alpha.recording#audioTrackRef", tgt: "ch.indiemusi.alpha.recording#audioTrackRef.mimeType", kind: "prop", name: Some("mimeType") }
  • AddedEdge AddedEdge { src: "ch.indiemusi.alpha.recording:body", tgt: "ch.indiemusi.alpha.recording:body.audioTrack", kind: "prop", name: Some("audioTrack") }
  • AddedEdge AddedEdge { src: "ch.indiemusi.alpha.recording:body.audioTrack", tgt: "ch.indiemusi.alpha.recording#audioTrackRef", kind: "ref", name: None }

Migration Guidance

Removed Elements

  • RemovedVertex { vertex_id: "ch.indiemusi.alpha.recording:body.audioFile" }

Added Elements

  • AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioTrackRef" }
  • AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioTrackRef.mimeType" }
  • AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioTrackRef.ownerDid" }
  • AddedVertex { vertex_id: "ch.indiemusi.alpha.recording#audioTrackRef.rkey" }
  • AddedVertex { vertex_id: "ch.indiemusi.alpha.recording:body.audioTrack" }

Additional Notes

  • Breaking: RequiredEdgeAdded { 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: RequiredEdgeAdded { 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:body", tgt: "ch.indiemusi.alpha.recording:body.audioFile", kind: "prop", name: Some("audioFile") }
  • Non-breaking: AddedEdge { src: "ch.indiemusi.alpha.recording#audioTrackRef", tgt: "ch.indiemusi.alpha.recording#audioTrackRef.mimeType", kind: "prop", name: Some("mimeType") }
  • Non-breaking: AddedEdge { src: "ch.indiemusi.alpha.recording:body", tgt: "ch.indiemusi.alpha.recording:body.audioTrack", kind: "prop", name: Some("audioTrack") }
  • Non-breaking: AddedEdge { src: "ch.indiemusi.alpha.recording:body.audioTrack", tgt: "ch.indiemusi.alpha.recording#audioTrackRef", 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.",
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 track record.",
35 +
          "format": "did",
36 +
          "type": "string"
37 +
        },
38 +
        "rkey": {
39 +
          "description": "Record key of the ch.indiemusi.alpha.audioTrack record within the space.",
40 +
          "maxLength": 512,
41 +
          "type": "string"
42 +
        }
43 +
      },
44 +
      "required": [
45 +
        "ownerDid",
46 +
        "rkey"
47 +
      ],
48 +
      "type": "object"
49 +
    },
25 50
    "main": {
26 51
      "description": "A recording of a song or musical work: the performance captured in a specific format",
27 52
      "key": "tid",
28 53
      "record": {
29 54
        "properties": {
30 55
          "artists": {
31 56
            "items": {
32 57
              "ref": "#artist",
33 58
              "type": "ref"
34 59
            },
35 60
            "minLength": 1,
36 61
            "type": "array"
37 62
          },
38 -
          "audioFile": {
39 -
            "type": "blob"
63 +
          "audioTrack": {
64 +
            "description": "Reference to the access-controlled audio file stored in the owner's atproto space.",
65 +
            "ref": "#audioTrackRef",
66 +
            "type": "ref"
40 67
          },
41 68
          "duration": {
42 69
            "description": "Duration of the recording in seconds",
43 70
            "type": "integer"
44 71
          },
45 72
          "isrc": {
46 73
            "description": "ISRC (International Standard Recording Code) with which the recording is registered",
47 74
            "maxLength": 12,
48 75
            "type": "string"
49 76
          },
50 77
          "masterOwner": {
51 78
            "ref": "#masterOwnerInfo",
52 79
            "type": "ref"
53 80
          },
54 81
          "song": {
55 82
            "ref": "ch.indiemusi.alpha.song",
56 83
            "type": "ref"
57 84
          },
58 85
          "title": {
59 86
            "maxLength": 255,
60 87
            "type": "string"
61 88
          }
62 89
        },
63 90
        "required": [
64 91
          "title",
65 92
          "artists"
66 93
        ],
67 94
        "type": "object"
68 95
      },
69 96
      "type": "record"
70 97
    },
71 98
    "masterOwnerInfo": {
72 99
      "description": "Information about the master owner",
73 100
      "properties": {
74 101
        "did": {
75 102
          "format": "did",
76 103
          "type": "string"
77 104
        },
78 105
        "masterOwner": {
79 106
          "ref": "ch.indiemusi.alpha.actor.masterOwner",
80 107
          "type": "ref"
81 108
        },
82 109
        "name": {
83 110
          "maxLength": 255,
84 111
          "type": "string"
85 112
        }
86 113
      },
87 114
      "type": "object"
88 115
    }
89 116
  },
90 117
  "id": "ch.indiemusi.alpha.recording",
91 118
  "lexicon": 1
92 119
}

Compare Other Versions

Lexicon Garden

@