From
bafyreihkr3euuq4ho77m5w5wx5g3qlc2emy75chq64ylhmwx5tl2rdwlem
indexed 2026-09-28 23:39 UTC
View this version
To
bafyreignzqxqdhrxg4mmmwnozbdf2wx7tk6yny64nymowjkptwv535qidq
indexed 2026-10-05 20:08 UTC
View this version
Compatibility
breaking 4 breaking changes, 23 non-breaking changes.
Breaking changes (4)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "app.tempomusic.notification.defs#subjectView", src: "app.tempomusic.notification.defs#subjectView", tgt: "app.tempomusic.notification.defs#subjectView.uri", kind: "prop", name: Some("uri") }
- RemovedVertex RemovedVertex { vertex_id: "app.tempomusic.feed.defs#authorView" }
- RemovedEdge RemovedEdge { src: "app.tempomusic.notification.defs#notificationView.author", tgt: "app.tempomusic.feed.defs#authorView", kind: "ref", name: None }
- ConstraintTightened ConstraintTightened { vertex_id: "app.tempomusic.notification.defs#notificationView.author", sort: "ref", old_value: "app.tempomusic.feed.defs#authorView", new_value: "app.tempomusic.actor.defs#profileViewBasic" }
Non-breaking changes (23)
- AddedVertex AddedVertex { vertex_id: "app.tempomusic.actor.defs#profileViewBasic" }
- AddedVertex AddedVertex { vertex_id: "app.tempomusic.feed.defs#albumRef" }
- AddedVertex AddedVertex { vertex_id: "app.tempomusic.feed.defs#artistRef" }
- AddedVertex AddedVertex { vertex_id: "app.tempomusic.feed.defs#songRef" }
- AddedVertex AddedVertex { vertex_id: "app.tempomusic.notification.defs#notificationView.subject" }
- AddedVertex AddedVertex { vertex_id: "app.tempomusic.notification.defs#subjectView" }
- AddedVertex AddedVertex { vertex_id: "app.tempomusic.notification.defs#subjectView.music" }
- AddedVertex AddedVertex { vertex_id: "app.tempomusic.notification.defs#subjectView.music:variant0" }
- AddedVertex AddedVertex { vertex_id: "app.tempomusic.notification.defs#subjectView.music:variant1" }
- AddedVertex AddedVertex { vertex_id: "app.tempomusic.notification.defs#subjectView.music:variant2" }
- AddedVertex AddedVertex { vertex_id: "app.tempomusic.notification.defs#subjectView.text" }
- AddedVertex AddedVertex { vertex_id: "app.tempomusic.notification.defs#subjectView.uri" }
- AddedEdge AddedEdge { src: "app.tempomusic.notification.defs#notificationView", tgt: "app.tempomusic.notification.defs#notificationView.subject", kind: "prop", name: Some("subject") }
- AddedEdge AddedEdge { src: "app.tempomusic.notification.defs#notificationView.author", tgt: "app.tempomusic.actor.defs#profileViewBasic", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.tempomusic.notification.defs#notificationView.subject", tgt: "app.tempomusic.notification.defs#subjectView", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.tempomusic.notification.defs#subjectView", tgt: "app.tempomusic.notification.defs#subjectView.music", kind: "prop", name: Some("music") }
- AddedEdge AddedEdge { src: "app.tempomusic.notification.defs#subjectView", tgt: "app.tempomusic.notification.defs#subjectView.text", kind: "prop", name: Some("text") }
- AddedEdge AddedEdge { src: "app.tempomusic.notification.defs#subjectView.music", tgt: "app.tempomusic.notification.defs#subjectView.music:variant0", kind: "variant", name: Some("app.tempomusic.feed.defs#songRef") }
- AddedEdge AddedEdge { src: "app.tempomusic.notification.defs#subjectView.music", tgt: "app.tempomusic.notification.defs#subjectView.music:variant1", kind: "variant", name: Some("app.tempomusic.feed.defs#albumRef") }
- AddedEdge AddedEdge { src: "app.tempomusic.notification.defs#subjectView.music", tgt: "app.tempomusic.notification.defs#subjectView.music:variant2", kind: "variant", name: Some("app.tempomusic.feed.defs#artistRef") }
- AddedEdge AddedEdge { src: "app.tempomusic.notification.defs#subjectView.music:variant0", tgt: "app.tempomusic.feed.defs#songRef", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.tempomusic.notification.defs#subjectView.music:variant1", tgt: "app.tempomusic.feed.defs#albumRef", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "app.tempomusic.notification.defs#subjectView.music:variant2", tgt: "app.tempomusic.feed.defs#artistRef", kind: "ref", name: None }
Migration guidance
Removed
RemovedVertex { vertex_id: "app.tempomusic.feed.defs#authorView" }
Added
AddedVertex { vertex_id: "app.tempomusic.actor.defs#profileViewBasic" }AddedVertex { vertex_id: "app.tempomusic.feed.defs#albumRef" }AddedVertex { vertex_id: "app.tempomusic.feed.defs#artistRef" }AddedVertex { vertex_id: "app.tempomusic.feed.defs#songRef" }AddedVertex { vertex_id: "app.tempomusic.notification.defs#notificationView.subject" }AddedVertex { vertex_id: "app.tempomusic.notification.defs#subjectView" }AddedVertex { vertex_id: "app.tempomusic.notification.defs#subjectView.music" }AddedVertex { vertex_id: "app.tempomusic.notification.defs#subjectView.music:variant0" }AddedVertex { vertex_id: "app.tempomusic.notification.defs#subjectView.music:variant1" }AddedVertex { vertex_id: "app.tempomusic.notification.defs#subjectView.music:variant2" }AddedVertex { vertex_id: "app.tempomusic.notification.defs#subjectView.text" }AddedVertex { vertex_id: "app.tempomusic.notification.defs#subjectView.uri" }
Constraint changes
- ConstraintTightened ConstraintTightened { vertex_id: "app.tempomusic.notification.defs#notificationView.author", sort: "ref", old_value: "app.tempomusic.feed.defs#authorView", new_value: "app.tempomusic.actor.defs#profileViewBasic" }
Notes
- Breaking: RequiredEdgeAdded { vertex_id: "app.tempomusic.notification.defs#subjectView", src: "app.tempomusic.notification.defs#subjectView", tgt: "app.tempomusic.notification.defs#subjectView.uri", kind: "prop", name: Some("uri") }
- Breaking: RemovedEdge { src: "app.tempomusic.notification.defs#notificationView.author", tgt: "app.tempomusic.feed.defs#authorView", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.tempomusic.notification.defs#notificationView", tgt: "app.tempomusic.notification.defs#notificationView.subject", kind: "prop", name: Some("subject") }
- Non-breaking: AddedEdge { src: "app.tempomusic.notification.defs#notificationView.author", tgt: "app.tempomusic.actor.defs#profileViewBasic", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.tempomusic.notification.defs#notificationView.subject", tgt: "app.tempomusic.notification.defs#subjectView", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.tempomusic.notification.defs#subjectView", tgt: "app.tempomusic.notification.defs#subjectView.music", kind: "prop", name: Some("music") }
- Non-breaking: AddedEdge { src: "app.tempomusic.notification.defs#subjectView", tgt: "app.tempomusic.notification.defs#subjectView.text", kind: "prop", name: Some("text") }
- Non-breaking: AddedEdge { src: "app.tempomusic.notification.defs#subjectView.music", tgt: "app.tempomusic.notification.defs#subjectView.music:variant0", kind: "variant", name: Some("app.tempomusic.feed.defs#songRef") }
- Non-breaking: AddedEdge { src: "app.tempomusic.notification.defs#subjectView.music", tgt: "app.tempomusic.notification.defs#subjectView.music:variant1", kind: "variant", name: Some("app.tempomusic.feed.defs#albumRef") }
- Non-breaking: AddedEdge { src: "app.tempomusic.notification.defs#subjectView.music", tgt: "app.tempomusic.notification.defs#subjectView.music:variant2", kind: "variant", name: Some("app.tempomusic.feed.defs#artistRef") }
- Non-breaking: AddedEdge { src: "app.tempomusic.notification.defs#subjectView.music:variant0", tgt: "app.tempomusic.feed.defs#songRef", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.tempomusic.notification.defs#subjectView.music:variant1", tgt: "app.tempomusic.feed.defs#albumRef", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "app.tempomusic.notification.defs#subjectView.music:variant2", tgt: "app.tempomusic.feed.defs#artistRef", kind: "ref", name: None }
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {44
"notificationView": {55
"description": "A single notification surfaced to the recipient. Server-projected from indexed like, reply and post records; recipients are scoped server-side from the viewer parameter.",66
"properties": {77
"author": {8
"description": "The actor whose action produced this notification.",9
"ref": "app.tempomusic.feed.defs#authorView",8
"description": "The actor whose action produced this notification. Its handle is the one the AppView has verified for that account, absent until projected.",9
"ref": "app.tempomusic.actor.defs#profileViewBasic",1010
"type": "ref"1111
},1212
"cid": {1313
"format": "cid",1414
"type": "string"1515
},1616
"indexedAt": {1717
"description": "Timestamp at which the AppView indexed the source record.",1818
"format": "datetime",1919
"type": "string"2020
},2121
"isRead": {2222
"description": "Server-computed from indexedAt and the recipient's stored seenAt; true when this notification predates seenAt.",2323
"type": "boolean"2424
},2525
"reason": {2626
"description": "Why this notification was produced. knownValues is informational; clients should accept unknown values and skip them.",2727
"knownValues": [2828
"post-liked",2929
"post-replied",3030
"reply-liked",3131
"post-mentioned",3232
"reply-mentioned"3333
],3434
"maxLength": 100,3535
"type": "string"3636
},3737
"reasonSubject": {3838
"description": "AT-URI of the post or reply that was acted upon (the recipient's own record). Matches Bluesky's reasonSubject semantics. Absent for mentions: the source record is the subject.",3939
"format": "at-uri",4040
"type": "string"4141
},4242
"record": {4343
"description": "The underlying app.tempomusic.feed.like, app.tempomusic.feed.reply or app.tempomusic.feed.post record carried verbatim with its $type discriminator. Lexicon-typed as unknown to match the AT Protocol convention for embedded records.",4444
"type": "unknown"4545
},46
"subject": {47
"description": "The recipient's own post or reply that was acted upon (reasonSubject), for the row excerpt. Present for post-liked and reply-liked while that record is live and has something to show; absent for post-replied and the two mention reasons, where the source record in `record` carries the text the row shows, and absent whenever the AppView has nothing to serve — the liked record is gone, or it is a liked reply whose text is blank, leaving nothing to excerpt.",48
"ref": "#subjectView",49
"type": "ref"50
},4651
"subjectRootUri": {4752
"description": "AT-URI of the root post for navigation. For post-liked / post-replied this equals reasonSubject; for reply-liked this is the root post the liked reply hangs off, letting clients open the right thread without a second lookup. For post-mentioned this is the source post itself; for reply-mentioned the root post of the thread the source reply belongs to.",4853
"format": "at-uri",4954
"type": "string"5055
},5156
"uri": {5257
"description": "AT-URI of the source record (the like, reply or post) that produced this notification.",5358
"format": "at-uri",5459
"type": "string"5560
}5661
},5762
"required": [5863
"uri",5964
"cid",6065
"author",6166
"reason",6267
"record",6368
"isRead",6469
"indexedAt"6570
],6671
"type": "object"72
},73
"subjectView": {74
"description": "The acted-upon record reduced to what a notification row shows of it: its text and, for a post, the music it is about — the fallback when the post has no text.",75
"properties": {76
"music": {77
"description": "The music the acted-upon post is about, so a row can fall back to it when the post has no text. Absent when the record is a reply. The union is open: clients must keep decoding a notification whose music $type they do not know.",78
"refs": [79
"app.tempomusic.feed.defs#songRef",80
"app.tempomusic.feed.defs#albumRef",81
"app.tempomusic.feed.defs#artistRef"82
],83
"type": "union"84
},85
"text": {86
"description": "The record's text. Absent when the record carries none, or only whitespace. A post with no text still carries its music, so a subject always has one of the two: a liked reply whose text is blank carries no subject at all. Bounds mirror app.tempomusic.feed.post#text.",87
"maxGraphemes": 300,88
"maxLength": 3000,89
"type": "string"90
},91
"uri": {92
"description": "AT-URI of the acted-upon record, equal to the notification's reasonSubject.",93
"format": "at-uri",94
"type": "string"95
}96
},97
"required": [98
"uri"99
],100
"type": "object"67101
}68102
},69103
"id": "app.tempomusic.notification.defs",70104
"lexicon": 171105
}