From
bafyreih5bm5ljawddt5lym2ndugygivpof63ibmmotw2ckjbqgk5mdftuu
indexed 2026-03-19 20:26 UTC
View this version
To
bafyreifbkkbnonncrumcsz5opr4ekgybtk3r7jerqilkaayb6773gijrme
indexed 2026-04-21 15:34 UTC
View this version
Compatibility
breaking 3 breaking changes, 28 non-breaking changes.
Breaking changes (3)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "me.linkna.lastfm#genreTag", src: "me.linkna.lastfm#genreTag", tgt: "me.linkna.lastfm#genreTag.name", kind: "prop", name: Some("name") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "me.linkna.lastfm#externalUrl", src: "me.linkna.lastfm#externalUrl", tgt: "me.linkna.lastfm#externalUrl.type", kind: "prop", name: Some("type") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "me.linkna.lastfm#externalUrl", src: "me.linkna.lastfm#externalUrl", tgt: "me.linkna.lastfm#externalUrl.url", kind: "prop", name: Some("url") }
Non-breaking changes (28)
- AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm#externalUrl" }
- AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm#externalUrl.type" }
- AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm#externalUrl.url" }
- AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm#genreTag" }
- AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm#genreTag.count" }
- AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm#genreTag.name" }
- AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.duration" }
- AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.externalUrls" }
- AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.externalUrls:items" }
- AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.genres" }
- AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.genres:items" }
- AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.isrcs" }
- AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.isrcs:items" }
- AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.tags" }
- AddedVertex AddedVertex { vertex_id: "me.linkna.lastfm:body.tags:items" }
- AddedEdge AddedEdge { src: "me.linkna.lastfm#genreTag", tgt: "me.linkna.lastfm#genreTag.count", kind: "prop", name: Some("count") }
- AddedEdge AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.duration", kind: "prop", name: Some("duration") }
- AddedEdge AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.externalUrls", kind: "prop", name: Some("externalUrls") }
- AddedEdge AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.genres", kind: "prop", name: Some("genres") }
- AddedEdge AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.isrcs", kind: "prop", name: Some("isrcs") }
- AddedEdge AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.tags", kind: "prop", name: Some("tags") }
- AddedEdge AddedEdge { src: "me.linkna.lastfm:body.externalUrls", tgt: "me.linkna.lastfm:body.externalUrls:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "me.linkna.lastfm:body.externalUrls:items", tgt: "me.linkna.lastfm#externalUrl", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "me.linkna.lastfm:body.genres", tgt: "me.linkna.lastfm:body.genres:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "me.linkna.lastfm:body.genres:items", tgt: "me.linkna.lastfm#genreTag", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "me.linkna.lastfm:body.isrcs", tgt: "me.linkna.lastfm:body.isrcs:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "me.linkna.lastfm:body.tags", tgt: "me.linkna.lastfm:body.tags:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "me.linkna.lastfm:body.tags:items", tgt: "me.linkna.lastfm#genreTag", kind: "ref", name: None }
Migration guidance
Added
AddedVertex { vertex_id: "me.linkna.lastfm#externalUrl" }AddedVertex { vertex_id: "me.linkna.lastfm#externalUrl.type" }AddedVertex { vertex_id: "me.linkna.lastfm#externalUrl.url" }AddedVertex { vertex_id: "me.linkna.lastfm#genreTag" }AddedVertex { vertex_id: "me.linkna.lastfm#genreTag.count" }AddedVertex { vertex_id: "me.linkna.lastfm#genreTag.name" }AddedVertex { vertex_id: "me.linkna.lastfm:body.duration" }AddedVertex { vertex_id: "me.linkna.lastfm:body.externalUrls" }AddedVertex { vertex_id: "me.linkna.lastfm:body.externalUrls:items" }AddedVertex { vertex_id: "me.linkna.lastfm:body.genres" }AddedVertex { vertex_id: "me.linkna.lastfm:body.genres:items" }AddedVertex { vertex_id: "me.linkna.lastfm:body.isrcs" }AddedVertex { vertex_id: "me.linkna.lastfm:body.isrcs:items" }AddedVertex { vertex_id: "me.linkna.lastfm:body.tags" }AddedVertex { vertex_id: "me.linkna.lastfm:body.tags:items" }
Notes
- Breaking: RequiredEdgeAdded { vertex_id: "me.linkna.lastfm#genreTag", src: "me.linkna.lastfm#genreTag", tgt: "me.linkna.lastfm#genreTag.name", kind: "prop", name: Some("name") }
- Breaking: RequiredEdgeAdded { vertex_id: "me.linkna.lastfm#externalUrl", src: "me.linkna.lastfm#externalUrl", tgt: "me.linkna.lastfm#externalUrl.type", kind: "prop", name: Some("type") }
- Breaking: RequiredEdgeAdded { vertex_id: "me.linkna.lastfm#externalUrl", src: "me.linkna.lastfm#externalUrl", tgt: "me.linkna.lastfm#externalUrl.url", kind: "prop", name: Some("url") }
- Non-breaking: AddedEdge { src: "me.linkna.lastfm#genreTag", tgt: "me.linkna.lastfm#genreTag.count", kind: "prop", name: Some("count") }
- Non-breaking: AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.duration", kind: "prop", name: Some("duration") }
- Non-breaking: AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.externalUrls", kind: "prop", name: Some("externalUrls") }
- Non-breaking: AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.genres", kind: "prop", name: Some("genres") }
- Non-breaking: AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.isrcs", kind: "prop", name: Some("isrcs") }
- Non-breaking: AddedEdge { src: "me.linkna.lastfm:body", tgt: "me.linkna.lastfm:body.tags", kind: "prop", name: Some("tags") }
- Non-breaking: AddedEdge { src: "me.linkna.lastfm:body.externalUrls", tgt: "me.linkna.lastfm:body.externalUrls:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "me.linkna.lastfm:body.externalUrls:items", tgt: "me.linkna.lastfm#externalUrl", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "me.linkna.lastfm:body.genres", tgt: "me.linkna.lastfm:body.genres:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "me.linkna.lastfm:body.genres:items", tgt: "me.linkna.lastfm#genreTag", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "me.linkna.lastfm:body.isrcs", tgt: "me.linkna.lastfm:body.isrcs:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "me.linkna.lastfm:body.tags", tgt: "me.linkna.lastfm:body.tags:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "me.linkna.lastfm:body.tags:items", tgt: "me.linkna.lastfm#genreTag", kind: "ref", name: None }
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {4
"externalUrl": {5
"properties": {6
"type": {7
"description": "MusicBrainz URL relation type (e.g. 'streaming', 'free streaming', 'youtube music video').",8
"type": "string"9
},10
"url": {11
"format": "uri",12
"type": "string"13
}14
},15
"required": [16
"type",17
"url"18
],19
"type": "object"20
},21
"genreTag": {22
"properties": {23
"count": {24
"type": "integer"25
},26
"name": {27
"type": "string"28
}29
},30
"required": [31
"name"32
],33
"type": "object"34
},435
"main": {536
"description": "A Last.fm scrobble play record written by Linkname.",637
"key": "tid",738
"record": {839
"properties": {940
"artistMbId": {1041
"description": "MusicBrainz ID for the artist.",1142
"type": "string"1243
},1344
"artistNames": {1445
"description": "Artist name(s).",1546
"items": {1647
"type": "string"1748
},1849
"type": "array"1950
},2051
"coverArtUrl": {2152
"description": "URL to the album cover art.",2253
"type": "string"2354
},2455
"createdAt": {2556
"description": "When this record was created.",2657
"format": "datetime",2758
"type": "string"2859
},60
"duration": {61
"description": "Track duration in milliseconds, from MusicBrainz.",62
"type": "integer"63
},64
"externalUrls": {65
"description": "External URL relations for the recording, from MusicBrainz.",66
"items": {67
"ref": "#externalUrl",68
"type": "ref"69
},70
"type": "array"71
},72
"genres": {73
"description": "Community-voted genres for the recording, from MusicBrainz.",74
"items": {75
"ref": "#genreTag",76
"type": "ref"77
},78
"type": "array"79
},80
"isrcs": {81
"description": "ISRC codes for the recording, from MusicBrainz.",82
"items": {83
"type": "string"84
},85
"type": "array"86
},2987
"originUrl": {3088
"description": "URL to the track on Last.fm.",3189
"format": "uri",3290
"type": "string"3391
},3492
"playedTime": {3593
"description": "When the track was played on Last.fm.",3694
"format": "datetime",3795
"type": "string"3896
},3997
"releaseMbId": {4098
"description": "MusicBrainz ID for the release/album.",4199
"type": "string"42100
},43101
"releaseName": {44102
"description": "Album/release name.",45103
"type": "string"46104
},105
"tags": {106
"description": "Community-voted tags for the recording, from MusicBrainz.",107
"items": {108
"ref": "#genreTag",109
"type": "ref"110
},111
"type": "array"112
},47113
"trackMbId": {48114
"description": "MusicBrainz ID for the track.",49115
"type": "string"50116
},51117
"trackName": {52118
"description": "Track/song name.",53119
"type": "string"54120
}55121
},56122
"required": [57123
"trackName",58124
"artistNames",59125
"createdAt"60126
],61127
"type": "object"62128
},63129
"type": "record"64130
}65131
},66132
"id": "me.linkna.lastfm",67133
"lexicon": 168134
}