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
"id": "id.sifa.profile.presentationDelivery",
3
3
"defs": {
4
4
"main": {
5
5
"key": "tid",
6
6
"type": "record",
7
7
"record": {
8
8
"type": "object",
9
9
"required": [
10
10
"createdAt"
11
11
],
12
12
"properties": {
13
13
"date": {
14
14
"type": "string",
15
15
"maxLength": 10,
16
16
"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."
17
17
},
18
18
"mode": {
19
19
"type": "string",
20
20
"description": "Whether this delivery was in person, virtual, or hybrid. Stores the full community.lexicon.calendar.event mode token; absent means in person.",
21
21
"knownValues": [
22
22
"community.lexicon.calendar.event#inperson",
23
23
"community.lexicon.calendar.event#virtual",
24
24
"community.lexicon.calendar.event#hybrid"
25
25
]
26
26
},
27
27
"role": {
28
28
"type": "string",
29
29
"maxLength": 640,
30
30
"description": "The presenter's role in this delivery. Open set; see id.sifa.defs#presentationRole.",
31
31
"knownValues": [
32
32
"id.sifa.defs#presenter",
33
33
"id.sifa.defs#panelist",
34
34
"id.sifa.defs#keynote",
35
35
"id.sifa.defs#workshop",
36
36
"id.sifa.defs#host"
37
37
],
38
38
"maxGraphemes": 64
39
39
},
40
40
"links": {
41
41
"type": "array",
42
42
"items": {
43
43
"ref": "id.sifa.defs#presentationLink",
44
44
"type": "ref"
45
45
},
46
46
"maxLength": 20,
47
47
"description": "Links specific to this delivery, such as the recording of this occasion."
48
48
},
49
49
"title": {
50
50
"type": "string",
51
51
"maxLength": 3000,
52
52
"description": "Fallback title for this delivery, used when no presentationRef is set.",
53
53
"maxGraphemes": 300
54
54
},
55
55
"status": {
56
56
"type": "string",
57
57
"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.",
58
58
"knownValues": [
59
59
"community.lexicon.calendar.event#scheduled",
60
60
"community.lexicon.calendar.event#cancelled",
61
61
"community.lexicon.calendar.event#postponed",
62
62
"community.lexicon.calendar.event#rescheduled",
63
63
"community.lexicon.calendar.event#planned"
64
64
]
65
65
},
66
+
"address": {
67
+
"ref": "community.lexicon.location.address",
68
+
"type": "ref",
69
+
"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."
70
+
},
66
71
"eventRef": {
67
72
"ref": "id.sifa.defs#externalRecordRef",
68
73
"type": "ref",
69
74
"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."
70
75
},
71
76
"location": {
72
77
"type": "string",
73
78
"maxLength": 2560,
74
-
"description": "Display location (city, country, or venue). On the linked branch, composed from the calendar event's structured locations.",
79
+
"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.",
75
80
"maxGraphemes": 256
76
81
},
77
82
"createdAt": {
78
83
"type": "string",
79
84
"format": "datetime",
80
85
"description": "Client-declared timestamp when this record was originally created."
81
86
},
82
87
"eventName": {
83
88
"type": "string",
84
89
"maxLength": 3000,
85
90
"description": "Name of the event or venue. On the linked branch, hydrated from the calendar event's name.",
86
91
"maxGraphemes": 300
87
92
},
93
+
"coSpeakers": {
94
+
"type": "array",
95
+
"items": {
96
+
"type": "string",
97
+
"format": "did"
98
+
},
99
+
"maxLength": 20,
100
+
"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."
101
+
},
88
102
"presentationRef": {
89
103
"ref": "id.sifa.defs#externalRecordRef",
90
104
"type": "ref",
91
105
"description": "Optional reference to the id.sifa.profile.presentation (the content) delivered here. When set, title, duration, and audiences are taken from it."
92
106
}
93
107
}
94
108
},
95
109
"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."
96
110
}
97
111
},
98
112
"$type": "com.atproto.lexicon.schema",
99
113
"lexicon": 1,
100
114
"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."
101
115
}