id.sifa.profile.presentationDelivery

sifa.id

Schema Diff

+15 -1

From

CID
bafyreiawrb4hhpq...
Indexed At
2026-06-19 22:54 UTC
View this version

To

CID
bafyreiak5smhlkd...
Indexed At
2026-07-18 22:50 UTC
View this version

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
}

Compare Other Versions

Lexicon Garden

@