From
bafyreigskbtu55tsmxhnuaz3ia67xkkwfn4pa5xhg6jzbfhtb4ytohind4
indexed 2026-04-25 22:34 UTC
View this version
To
bafyreig4qh7fetnfs7zakoiddwfrylmsjhyav26nqy3p5urs7a447zerx4
indexed 2026-04-25 23:14 UTC
View this version
Compatibility
breaking 36 breaking changes, 23 non-breaking changes.
Breaking changes (36)
- RequiredEdgeRemoved RequiredEdgeRemoved { vertex_id: "org.latha.gathering#uri", src: "org.latha.gathering#uri", tgt: "org.latha.gathering#uri.uri", kind: "prop", name: Some("uri") }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#cancelled" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#hybrid" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#inperson" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#location" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#location.address" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#location.country" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#location.locality" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#location.name" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#location.postalCode" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#location.region" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#mode" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#planned" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#postponed" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#rescheduled" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#scheduled" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#status" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#uri" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#uri.name" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#uri.uri" }
- RemovedVertex RemovedVertex { vertex_id: "org.latha.gathering#virtual" }
- RemovedEdge RemovedEdge { src: "org.latha.gathering#location", tgt: "org.latha.gathering#location.address", kind: "prop", name: Some("address") }
- RemovedEdge RemovedEdge { src: "org.latha.gathering#location", tgt: "org.latha.gathering#location.country", kind: "prop", name: Some("country") }
- RemovedEdge RemovedEdge { src: "org.latha.gathering#location", tgt: "org.latha.gathering#location.locality", kind: "prop", name: Some("locality") }
- RemovedEdge RemovedEdge { src: "org.latha.gathering#location", tgt: "org.latha.gathering#location.name", kind: "prop", name: Some("name") }
- RemovedEdge RemovedEdge { src: "org.latha.gathering#location", tgt: "org.latha.gathering#location.postalCode", kind: "prop", name: Some("postalCode") }
- RemovedEdge RemovedEdge { src: "org.latha.gathering#location", tgt: "org.latha.gathering#location.region", kind: "prop", name: Some("region") }
- RemovedEdge RemovedEdge { src: "org.latha.gathering#uri", tgt: "org.latha.gathering#uri.name", kind: "prop", name: Some("name") }
- RemovedEdge RemovedEdge { src: "org.latha.gathering:body.locations:items", tgt: "org.latha.gathering#location", kind: "ref", name: None }
- RemovedEdge RemovedEdge { src: "org.latha.gathering:body.mode", tgt: "org.latha.gathering#mode", kind: "ref", name: None }
- RemovedEdge RemovedEdge { src: "org.latha.gathering:body.status", tgt: "org.latha.gathering#status", kind: "ref", name: None }
- RemovedEdge RemovedEdge { src: "org.latha.gathering:body.uris:items", tgt: "org.latha.gathering#uri", kind: "ref", name: None }
- KindChanged KindChanged { vertex_id: "org.latha.gathering:body.locations:items", old_kind: "ref", new_kind: "union" }
- ConstraintTightened ConstraintTightened { vertex_id: "org.latha.gathering:body.mode", sort: "ref", old_value: "org.latha.gathering#mode", new_value: "community.lexicon.calendar.event#mode" }
- ConstraintTightened ConstraintTightened { vertex_id: "org.latha.gathering:body.status", sort: "ref", old_value: "org.latha.gathering#status", new_value: "community.lexicon.calendar.event#status" }
- ConstraintTightened ConstraintTightened { vertex_id: "org.latha.gathering:body.uris:items", sort: "ref", old_value: "org.latha.gathering#uri", new_value: "community.lexicon.calendar.event#uri" }
Non-breaking changes (23)
- AddedVertex AddedVertex { vertex_id: "community.lexicon.calendar.event#mode" }
- AddedVertex AddedVertex { vertex_id: "community.lexicon.calendar.event#status" }
- AddedVertex AddedVertex { vertex_id: "community.lexicon.calendar.event#uri" }
- AddedVertex AddedVertex { vertex_id: "community.lexicon.location.address" }
- AddedVertex AddedVertex { vertex_id: "community.lexicon.location.fsq" }
- AddedVertex AddedVertex { vertex_id: "community.lexicon.location.geo" }
- AddedVertex AddedVertex { vertex_id: "community.lexicon.location.hthree" }
- AddedVertex AddedVertex { vertex_id: "org.latha.gathering:body.locations:items:variant0" }
- AddedVertex AddedVertex { vertex_id: "org.latha.gathering:body.locations:items:variant1" }
- AddedVertex AddedVertex { vertex_id: "org.latha.gathering:body.locations:items:variant2" }
- AddedVertex AddedVertex { vertex_id: "org.latha.gathering:body.locations:items:variant3" }
- AddedEdge AddedEdge { src: "org.latha.gathering:body.locations:items", tgt: "org.latha.gathering:body.locations:items:variant0", kind: "variant", name: Some("community.lexicon.location.address") }
- AddedEdge AddedEdge { src: "org.latha.gathering:body.locations:items", tgt: "org.latha.gathering:body.locations:items:variant1", kind: "variant", name: Some("community.lexicon.location.geo") }
- AddedEdge AddedEdge { src: "org.latha.gathering:body.locations:items", tgt: "org.latha.gathering:body.locations:items:variant2", kind: "variant", name: Some("community.lexicon.location.fsq") }
- AddedEdge AddedEdge { src: "org.latha.gathering:body.locations:items", tgt: "org.latha.gathering:body.locations:items:variant3", kind: "variant", name: Some("community.lexicon.location.hthree") }
- AddedEdge AddedEdge { src: "org.latha.gathering:body.locations:items:variant0", tgt: "community.lexicon.location.address", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.latha.gathering:body.locations:items:variant1", tgt: "community.lexicon.location.geo", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.latha.gathering:body.locations:items:variant2", tgt: "community.lexicon.location.fsq", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.latha.gathering:body.locations:items:variant3", tgt: "community.lexicon.location.hthree", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.latha.gathering:body.mode", tgt: "community.lexicon.calendar.event#mode", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.latha.gathering:body.status", tgt: "community.lexicon.calendar.event#status", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.latha.gathering:body.uris:items", tgt: "community.lexicon.calendar.event#uri", kind: "ref", name: None }
- ConstraintRemoved ConstraintRemoved { vertex_id: "org.latha.gathering:body.locations:items", sort: "ref" }
Migration guidance
Removed
RemovedVertex { vertex_id: "org.latha.gathering#cancelled" }RemovedVertex { vertex_id: "org.latha.gathering#hybrid" }RemovedVertex { vertex_id: "org.latha.gathering#inperson" }RemovedVertex { vertex_id: "org.latha.gathering#location" }RemovedVertex { vertex_id: "org.latha.gathering#location.address" }RemovedVertex { vertex_id: "org.latha.gathering#location.country" }RemovedVertex { vertex_id: "org.latha.gathering#location.locality" }RemovedVertex { vertex_id: "org.latha.gathering#location.name" }RemovedVertex { vertex_id: "org.latha.gathering#location.postalCode" }RemovedVertex { vertex_id: "org.latha.gathering#location.region" }RemovedVertex { vertex_id: "org.latha.gathering#mode" }RemovedVertex { vertex_id: "org.latha.gathering#planned" }RemovedVertex { vertex_id: "org.latha.gathering#postponed" }RemovedVertex { vertex_id: "org.latha.gathering#rescheduled" }RemovedVertex { vertex_id: "org.latha.gathering#scheduled" }RemovedVertex { vertex_id: "org.latha.gathering#status" }RemovedVertex { vertex_id: "org.latha.gathering#uri" }RemovedVertex { vertex_id: "org.latha.gathering#uri.name" }RemovedVertex { vertex_id: "org.latha.gathering#uri.uri" }RemovedVertex { vertex_id: "org.latha.gathering#virtual" }
Added
AddedVertex { vertex_id: "community.lexicon.calendar.event#mode" }AddedVertex { vertex_id: "community.lexicon.calendar.event#status" }AddedVertex { vertex_id: "community.lexicon.calendar.event#uri" }AddedVertex { vertex_id: "community.lexicon.location.address" }AddedVertex { vertex_id: "community.lexicon.location.fsq" }AddedVertex { vertex_id: "community.lexicon.location.geo" }AddedVertex { vertex_id: "community.lexicon.location.hthree" }AddedVertex { vertex_id: "org.latha.gathering:body.locations:items:variant0" }AddedVertex { vertex_id: "org.latha.gathering:body.locations:items:variant1" }AddedVertex { vertex_id: "org.latha.gathering:body.locations:items:variant2" }AddedVertex { vertex_id: "org.latha.gathering:body.locations:items:variant3" }
Constraint changes
- ConstraintTightened ConstraintTightened { vertex_id: "org.latha.gathering:body.uris:items", sort: "ref", old_value: "org.latha.gathering#uri", new_value: "community.lexicon.calendar.event#uri" }
- ConstraintTightened ConstraintTightened { vertex_id: "org.latha.gathering:body.mode", sort: "ref", old_value: "org.latha.gathering#mode", new_value: "community.lexicon.calendar.event#mode" }
- ConstraintTightened ConstraintTightened { vertex_id: "org.latha.gathering:body.status", sort: "ref", old_value: "org.latha.gathering#status", new_value: "community.lexicon.calendar.event#status" }
- ConstraintRemoved ConstraintRemoved { vertex_id: "org.latha.gathering:body.locations:items", sort: "ref" }
Notes
- Breaking: RequiredEdgeRemoved { vertex_id: "org.latha.gathering#uri", src: "org.latha.gathering#uri", tgt: "org.latha.gathering#uri.uri", kind: "prop", name: Some("uri") }
- Breaking: RemovedEdge { src: "org.latha.gathering#location", tgt: "org.latha.gathering#location.address", kind: "prop", name: Some("address") }
- Breaking: RemovedEdge { src: "org.latha.gathering#location", tgt: "org.latha.gathering#location.country", kind: "prop", name: Some("country") }
- Breaking: RemovedEdge { src: "org.latha.gathering#location", tgt: "org.latha.gathering#location.locality", kind: "prop", name: Some("locality") }
- Breaking: RemovedEdge { src: "org.latha.gathering#location", tgt: "org.latha.gathering#location.name", kind: "prop", name: Some("name") }
- Breaking: RemovedEdge { src: "org.latha.gathering#location", tgt: "org.latha.gathering#location.postalCode", kind: "prop", name: Some("postalCode") }
- Breaking: RemovedEdge { src: "org.latha.gathering#location", tgt: "org.latha.gathering#location.region", kind: "prop", name: Some("region") }
- Breaking: RemovedEdge { src: "org.latha.gathering#uri", tgt: "org.latha.gathering#uri.name", kind: "prop", name: Some("name") }
- Breaking: RemovedEdge { src: "org.latha.gathering:body.locations:items", tgt: "org.latha.gathering#location", kind: "ref", name: None }
- Breaking: RemovedEdge { src: "org.latha.gathering:body.mode", tgt: "org.latha.gathering#mode", kind: "ref", name: None }
- Breaking: RemovedEdge { src: "org.latha.gathering:body.status", tgt: "org.latha.gathering#status", kind: "ref", name: None }
- Breaking: RemovedEdge { src: "org.latha.gathering:body.uris:items", tgt: "org.latha.gathering#uri", kind: "ref", name: None }
- Breaking: KindChanged { vertex_id: "org.latha.gathering:body.locations:items", old_kind: "ref", new_kind: "union" }
- Non-breaking: AddedEdge { src: "org.latha.gathering:body.locations:items", tgt: "org.latha.gathering:body.locations:items:variant0", kind: "variant", name: Some("community.lexicon.location.address") }
- Non-breaking: AddedEdge { src: "org.latha.gathering:body.locations:items", tgt: "org.latha.gathering:body.locations:items:variant1", kind: "variant", name: Some("community.lexicon.location.geo") }
- Non-breaking: AddedEdge { src: "org.latha.gathering:body.locations:items", tgt: "org.latha.gathering:body.locations:items:variant2", kind: "variant", name: Some("community.lexicon.location.fsq") }
- Non-breaking: AddedEdge { src: "org.latha.gathering:body.locations:items", tgt: "org.latha.gathering:body.locations:items:variant3", kind: "variant", name: Some("community.lexicon.location.hthree") }
- Non-breaking: AddedEdge { src: "org.latha.gathering:body.locations:items:variant0", tgt: "community.lexicon.location.address", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.latha.gathering:body.locations:items:variant1", tgt: "community.lexicon.location.geo", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.latha.gathering:body.locations:items:variant2", tgt: "community.lexicon.location.fsq", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.latha.gathering:body.locations:items:variant3", tgt: "community.lexicon.location.hthree", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.latha.gathering:body.mode", tgt: "community.lexicon.calendar.event#mode", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.latha.gathering:body.status", tgt: "community.lexicon.calendar.event#status", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.latha.gathering:body.uris:items", tgt: "community.lexicon.calendar.event#uri", kind: "ref", name: None }
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {44
"actorRef": {55
"description": "A lightweight reference to an ATProto identity.",66
"properties": {77
"did": {88
"description": "ATProto DID.",99
"format": "did",1010
"type": "string"1111
},1212
"handle": {1313
"description": "Current ATProto handle.",1414
"type": "string"1515
}1616
},1717
"required": [1818
"did"1919
],2020
"type": "object"2121
},2222
"attendee": {23
"description": "A rich attendee record with role, projects, and metadata. Extends community.lexicon.calendar.rsvp with role, bio, projects, and tags.",23
"description": "A rich attendee record extending community.lexicon.calendar.rsvp with role, bio, projects, and tags. While rsvp is a separate record linking a subject to a status, attendee embeds identity and metadata directly.",2424
"properties": {2525
"bio": {2626
"description": "Short bio or tagline.",2727
"maxGraphemes": 500,2828
"maxLength": 5000,2929
"type": "string"3030
},3131
"did": {3232
"description": "ATProto DID.",3333
"format": "did",3434
"type": "string"3535
},3636
"displayName": {3737
"description": "Display name.",3838
"maxGraphemes": 100,3939
"maxLength": 1000,4040
"type": "string"4141
},4242
"handle": {4343
"description": "ATProto handle.",4444
"type": "string"4545
},4646
"notes": {4747
"description": "Researcher notes about this attendee.",4848
"maxGraphemes": 1000,4949
"maxLength": 10000,5050
"type": "string"5151
},5252
"projects": {5353
"description": "Projects this person builds or maintains.",5454
"items": {5555
"ref": "org.latha.gathering#projectRef",5656
"type": "ref"5757
},5858
"type": "array"5959
},6060
"role": {6161
"description": "Role in the gathering: host, organizer, participant, speaker, volunteer.",6262
"ref": "org.latha.gathering#role",6363
"type": "ref"6464
},6565
"tags": {6666
"description": "Interest tags (a11y, privacy, transit, category-theory, etc.).",6767
"items": {6868
"maxLength": 640,6969
"type": "string"7070
},7171
"type": "array"7272
}7373
},7474
"required": [7575
"did"7676
],7777
"type": "object"7878
},79
"cancelled": {80
"description": "Gathering has been cancelled.",81
"type": "token"82
},8379
"host": {8480
"description": "Host of the gathering.",8581
"type": "token"8682
},87
"hybrid": {88
"description": "Hybrid (in-person and virtual) gathering.",89
"type": "token"90
},91
"inperson": {92
"description": "In-person gathering.",93
"type": "token"94
},95
"location": {96
"description": "A physical location.",97
"properties": {98
"address": {99
"description": "Street address.",100
"maxGraphemes": 200,101
"maxLength": 2000,102
"type": "string"103
},104
"country": {105
"description": "ISO 3166-1 alpha-2 country code.",106
"maxLength": 2,107
"type": "string"108
},109
"locality": {110
"description": "City or locality.",111
"maxGraphemes": 50,112
"maxLength": 500,113
"type": "string"114
},115
"name": {116
"description": "Venue name.",117
"maxGraphemes": 100,118
"maxLength": 1000,119
"type": "string"120
},121
"postalCode": {122
"description": "Postal code.",123
"maxLength": 20,124
"type": "string"125
},126
"region": {127
"description": "State or province.",128
"maxGraphemes": 50,129
"maxLength": 500,130
"type": "string"131
}132
},133
"type": "object"134
},13583
"main": {13684
"description": "A community gathering or meetup with structured attendee data and extensible thematic sections.",13785
"key": "tid",13886
"record": {13987
"properties": {14088
"attendees": {14189
"description": "People who attended the gathering, with roles and metadata.",14290
"items": {14391
"ref": "org.latha.gathering#attendee",14492
"type": "ref"14593
},14694
"type": "array"14795
},14896
"createdAt": {14997
"description": "Client-declared timestamp when this record was created.",15098
"format": "datetime",15199
"type": "string"152100
},153101
"description": {154102
"description": "Brief description of the gathering.",155103
"maxGraphemes": 2000,156104
"maxLength": 20000,157105
"type": "string"158106
},159107
"endsAt": {160108
"description": "Client-declared timestamp when the gathering ends.",161109
"format": "datetime",162110
"type": "string"163111
},164112
"format": {165113
"description": "Gathering format (e.g., unconference, workshop, hackathon, panel).",166114
"maxGraphemes": 100,167115
"maxLength": 1000,168116
"type": "string"169117
},170118
"host": {171119
"description": "The primary host or organizing identity.",172120
"ref": "org.latha.gathering#actorRef",173121
"type": "ref"174122
},175123
"locations": {176
"description": "Where the gathering takes place.",124
"description": "Where the gathering takes place. Reuses community.lexicon.location union (address, geo, fsq, hthree).",177125
"items": {178
"ref": "org.latha.gathering#location",179
"type": "ref"126
"refs": [127
"community.lexicon.location.address",128
"community.lexicon.location.geo",129
"community.lexicon.location.fsq",130
"community.lexicon.location.hthree"131
],132
"type": "union"180133
},181134
"type": "array"182135
},183136
"mode": {184
"description": "The attendance mode of the gathering.",185
"ref": "org.latha.gathering#mode",137
"description": "The attendance mode of the gathering. Reuses community.lexicon.calendar.event#mode.",138
"ref": "community.lexicon.calendar.event#mode",186139
"type": "ref"187140
},188141
"name": {189142
"description": "Name of the gathering.",190143
"maxGraphemes": 200,191144
"maxLength": 2000,192145
"type": "string"193146
},194147
"sections": {195148
"description": "Modular sections for grouping and analyzing the gathering. Each entry must specify a $type. Built-in: thematicCluster. Other lexicons may add more.",196149
"items": {197150
"closed": false,198151
"refs": [199152
"org.latha.gathering#thematicCluster"200153
],201154
"type": "union"202155
},203156
"type": "array"204157
},205158
"startsAt": {206159
"description": "Client-declared timestamp when the gathering starts.",207160
"format": "datetime",208161
"type": "string"209162
},210163
"status": {211
"description": "The status of the gathering.",212
"ref": "org.latha.gathering#status",164
"description": "The status of the gathering. Reuses community.lexicon.calendar.event#status.",165
"ref": "community.lexicon.calendar.event#status",213166
"type": "ref"214167
},215168
"uris": {216
"description": "Platform links (OpenMeet, Meetup.com, etc.).",169
"description": "Platform links (OpenMeet, Meetup.com, etc.). Reuses community.lexicon.calendar.event#uri.",217170
"items": {218
"ref": "org.latha.gathering#uri",171
"ref": "community.lexicon.calendar.event#uri",219172
"type": "ref"220173
},221174
"type": "array"222175
}223176
},224177
"required": [225178
"name",226179
"createdAt"227180
],228181
"type": "object"229182
},230183
"type": "record"231184
},232
"mode": {233
"description": "Attendance mode of the gathering.",234
"knownValues": [235
"org.latha.gathering#inperson",236
"org.latha.gathering#hybrid",237
"org.latha.gathering#virtual"238
],239
"type": "string"240
},241185
"organizer": {242186
"description": "Organizer of the gathering.",243187
"type": "token"244188
},245189
"participant": {246190
"description": "Participant in the gathering.",247191
"type": "token"248192
},249
"planned": {250
"description": "Gathering is planned.",251
"type": "token"252
},253
"postponed": {254
"description": "Gathering has been postponed.",255
"type": "token"256
},257193
"projectRef": {258194
"description": "A reference to a project or tool.",259195
"properties": {260196
"name": {261197
"description": "Project name.",262198
"maxGraphemes": 100,263199
"maxLength": 1000,264200
"type": "string"265201
},266202
"uri": {267203
"description": "Link to the project.",268204
"format": "uri",269205
"type": "string"270206
}271207
},272208
"required": [273209
"name"274210
],275211
"type": "object"276
},277
"rescheduled": {278
"description": "Gathering has been rescheduled.",279
"type": "token"280212
},281213
"role": {282
"description": "Role of an attendee in the gathering.",214
"description": "Role of an attendee in the gathering. No existing lexicon defines attendee roles; community.lexicon.calendar.rsvp only has going/interested/notgoing.",283215
"knownValues": [284216
"org.latha.gathering#host",285217
"org.latha.gathering#organizer",286218
"org.latha.gathering#participant",287219
"org.latha.gathering#speaker",288220
"org.latha.gathering#volunteer"289221
],290222
"type": "string"291223
},292
"scheduled": {293
"description": "Gathering is scheduled.",294
"type": "token"295
},296224
"speaker": {297225
"description": "Speaker at the gathering.",298226
"type": "token"299227
},300
"status": {301
"description": "Status of the gathering.",302
"knownValues": [303
"org.latha.gathering#planned",304
"org.latha.gathering#scheduled",305
"org.latha.gathering#rescheduled",306
"org.latha.gathering#postponed",307
"org.latha.gathering#cancelled"308
],309
"type": "string"310
},311228
"thematicCluster": {312229
"description": "A group of attendees united by a shared theme, practice, or infrastructure role. Each cluster names a social or technical layer present at the gathering.",313230
"properties": {314231
"description": {315232
"description": "What brings this group together or what they provide.",316233
"maxGraphemes": 1000,317234
"maxLength": 10000,318235
"type": "string"319236
},320237
"members": {321238
"description": "People in this cluster.",322239
"items": {323240
"ref": "org.latha.gathering#actorRef",324241
"type": "ref"325242
},326243
"type": "array"327244
},328245
"name": {329246
"description": "Cluster name (e.g., Organizer Core, Protocol Infrastructure, Technologist-Philosophers).",330247
"maxGraphemes": 100,331248
"maxLength": 1000,332249
"type": "string"333250
}334251
},335252
"required": [336253
"name"337254
],338255
"type": "object"339256
},340
"uri": {341
"description": "A named link.",342
"properties": {343
"name": {344
"description": "Label for the URI.",345
"maxGraphemes": 50,346
"maxLength": 500,347
"type": "string"348
},349
"uri": {350
"description": "The URI.",351
"format": "uri",352
"type": "string"353
}354
},355
"required": [356
"uri"357
],358
"type": "object"359
},360
"virtual": {361
"description": "Virtual gathering.",362
"type": "token"363
},364257
"volunteer": {365258
"description": "Volunteer at the gathering.",366259
"type": "token"367260
}368261
},369
"description": "A community gathering or meetup record with attendees and extensible thematic sections. Covers event metadata, rich attendee data, and modular grouping of people by theme or infrastructure role. Schema: https://gathering.latha.org/#at://did:plc:ngokl2gnmpbvuvrfckja3g7p/org.latha.gathering/3mkdvt6ljja2e",262
"description": "A community gathering or meetup with structured attendee data and extensible thematic sections. Reuses community.lexicon.calendar.event for mode/status/uris and community.lexicon.location for locations. Adds rich attendee records (role, bio, projects, tags) and thematic clustering.",370263
"id": "org.latha.gathering",371264
"lexicon": 1372265
}