id.sifa.profile.presentationDelivery
Schema Diff
+15 -1
Compatibility Analysis
Backward Compatible
Backward compatible. 8 non-breaking changes.
Non-Breaking Changes (8)
- AddedVertex AddedVertex { vertex_id: "community.lexicon.location.address" }
- AddedVertex AddedVertex { vertex_id: "id.sifa.profile.presentationDelivery:body.address" }
- AddedVertex AddedVertex { vertex_id: "id.sifa.profile.presentationDelivery:body.coSpeakers" }
- AddedVertex AddedVertex { vertex_id: "id.sifa.profile.presentationDelivery:body.coSpeakers:items" }
- AddedEdge AddedEdge { src: "id.sifa.profile.presentationDelivery:body", tgt: "id.sifa.profile.presentationDelivery:body.address", kind: "prop", name: Some("address") }
- AddedEdge AddedEdge { src: "id.sifa.profile.presentationDelivery:body", tgt: "id.sifa.profile.presentationDelivery:body.coSpeakers", kind: "prop", name: Some("coSpeakers") }
- AddedEdge AddedEdge { src: "id.sifa.profile.presentationDelivery:body.address", tgt: "community.lexicon.location.address", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "id.sifa.profile.presentationDelivery:body.coSpeakers", tgt: "id.sifa.profile.presentationDelivery:body.coSpeakers:items", kind: "items", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "community.lexicon.location.address" }AddedVertex { vertex_id: "id.sifa.profile.presentationDelivery:body.address" }AddedVertex { vertex_id: "id.sifa.profile.presentationDelivery:body.coSpeakers" }AddedVertex { vertex_id: "id.sifa.profile.presentationDelivery:body.coSpeakers:items" }
Additional Notes
- Non-breaking: AddedEdge { src: "id.sifa.profile.presentationDelivery:body", tgt: "id.sifa.profile.presentationDelivery:body.address", kind: "prop", name: Some("address") }
- Non-breaking: AddedEdge { src: "id.sifa.profile.presentationDelivery:body", tgt: "id.sifa.profile.presentationDelivery:body.coSpeakers", kind: "prop", name: Some("coSpeakers") }
- Non-breaking: AddedEdge { src: "id.sifa.profile.presentationDelivery:body.address", tgt: "community.lexicon.location.address", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "id.sifa.profile.presentationDelivery:body.coSpeakers", tgt: "id.sifa.profile.presentationDelivery:body.coSpeakers:items", kind: "items", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"description": "Record representing a single occasion on which a presentation was delivered. This is the entry shown on a profile's activity timeline. At least one of presentationRef, title, or eventName is expected, enforced at the app layer.",
6
6
"key": "tid",
7
7
"record": {
8
8
"properties": {
9
+
"address": {
10
+
"description": "Structured delivery location. Sifa enforces ISO 3166-1 alpha-2 country codes at the app layer and surfaces country (for a flag) and locality (city); region, postalCode, and street are unused for deliveries. Takes precedence over the legacy location string when present.",
11
+
"ref": "community.lexicon.location.address",
12
+
"type": "ref"
13
+
},
14
+
"coSpeakers": {
15
+
"description": "DIDs of co-speakers who presented alongside the author at this occasion. Any atproto account is allowed; hydrated to profile cards on read and linked to the co-speaker's Sifa profile.",
16
+
"items": {
17
+
"format": "did",
18
+
"type": "string"
19
+
},
20
+
"maxLength": 20,
21
+
"type": "array"
22
+
},
9
23
"createdAt": {
10
24
"description": "Client-declared timestamp when this record was originally created.",
11
25
"format": "datetime",
12
26
"type": "string"
13
27
},
14
28
"date": {
15
29
"description": "Calendar date of this delivery as YYYY-MM-DD (day only, no time). Future dates are allowed for upcoming deliveries. The day-only shape is enforced at the app layer. On the linked branch, derived from the event's startsAt in the event's own offset.",
16
30
"maxLength": 10,
17
31
"type": "string"
18
32
},
19
33
"eventName": {
20
34
"description": "Name of the event or venue. On the linked branch, hydrated from the calendar event's name.",
21
35
"maxGraphemes": 300,
22
36
"maxLength": 3000,
23
37
"type": "string"
24
38
},
25
39
"eventRef": {
26
40
"description": "Optional reference to a community.lexicon.calendar.event for this occasion. Display fields are hydrated live from the target by AT-URI, with the stored fields as a fallback when the target is unavailable.",
27
41
"ref": "id.sifa.defs#externalRecordRef",
28
42
"type": "ref"
29
43
},
30
44
"links": {
31
45
"description": "Links specific to this delivery, such as the recording of this occasion.",
32
46
"items": {
33
47
"ref": "id.sifa.defs#presentationLink",
34
48
"type": "ref"
35
49
},
36
50
"maxLength": 20,
37
51
"type": "array"
38
52
},
39
53
"location": {
40
-
"description": "Display location (city, country, or venue). On the linked branch, composed from the calendar event's structured locations.",
54
+
"description": "Legacy free-text display location (city, country, or venue), retained for dual-read. Prefer the structured address field. On the linked branch, composed from the calendar event's structured locations.",
41
55
"maxGraphemes": 256,
42
56
"maxLength": 2560,
43
57
"type": "string"
44
58
},
45
59
"mode": {
46
60
"description": "Whether this delivery was in person, virtual, or hybrid. Stores the full community.lexicon.calendar.event mode token; absent means in person.",
47
61
"knownValues": [
48
62
"community.lexicon.calendar.event#inperson",
49
63
"community.lexicon.calendar.event#virtual",
50
64
"community.lexicon.calendar.event#hybrid"
51
65
],
52
66
"type": "string"
53
67
},
54
68
"presentationRef": {
55
69
"description": "Optional reference to the id.sifa.profile.presentation (the content) delivered here. When set, title, duration, and audiences are taken from it.",
56
70
"ref": "id.sifa.defs#externalRecordRef",
57
71
"type": "ref"
58
72
},
59
73
"role": {
60
74
"description": "The presenter's role in this delivery. Open set; see id.sifa.defs#presentationRole.",
61
75
"knownValues": [
62
76
"id.sifa.defs#presenter",
63
77
"id.sifa.defs#panelist",
64
78
"id.sifa.defs#keynote",
65
79
"id.sifa.defs#workshop",
66
80
"id.sifa.defs#host"
67
81
],
68
82
"maxGraphemes": 64,
69
83
"maxLength": 640,
70
84
"type": "string"
71
85
},
72
86
"status": {
73
87
"description": "Scheduling status of this delivery, typically hydrated from a linked calendar event. Stores the full community.lexicon.calendar.event status token. Consumers should surface cancelled and postponed states.",
74
88
"knownValues": [
75
89
"community.lexicon.calendar.event#scheduled",
76
90
"community.lexicon.calendar.event#cancelled",
77
91
"community.lexicon.calendar.event#postponed",
78
92
"community.lexicon.calendar.event#rescheduled",
79
93
"community.lexicon.calendar.event#planned"
80
94
],
81
95
"type": "string"
82
96
},
83
97
"title": {
84
98
"description": "Fallback title for this delivery, used when no presentationRef is set.",
85
99
"maxGraphemes": 300,
86
100
"maxLength": 3000,
87
101
"type": "string"
88
102
}
89
103
},
90
104
"required": [
91
105
"createdAt"
92
106
],
93
107
"type": "object"
94
108
},
95
109
"type": "record"
96
110
}
97
111
},
98
112
"description": "An occasion on which a person delivered a presentation: a specific talk, panel, workshop, or demo at an event. References the reusable id.sifa.profile.presentation content and, optionally, the calendar event.",
99
113
"id": "id.sifa.profile.presentationDelivery",
100
114
"lexicon": 1
101
115
}