ch.indiemusi.alpha.recording

indiemusi.ch

Schema Diff

+34 -1

From

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

To

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

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
}

Compare Other Versions

Lexicon Garden

@