org.simocracy.gathering
Schema Diff
+69 -0
Compatibility Analysis
Backward Compatible
Backward compatible. 24 non-breaking changes.
Non-Breaking Changes (24)
- AddedVertex AddedVertex { vertex_id: "org.simocracy.gathering:body.allocationMechanism" }
- AddedVertex AddedVertex { vertex_id: "org.simocracy.gathering:body.context" }
- AddedVertex AddedVertex { vertex_id: "org.simocracy.gathering:body.contextFacets" }
- AddedVertex AddedVertex { vertex_id: "org.simocracy.gathering:body.contextFacets:items" }
- AddedVertex AddedVertex { vertex_id: "org.simocracy.gathering:body.logo" }
- AddedVertex AddedVertex { vertex_id: "org.simocracy.gathering:body.proposalScope" }
- AddedVertex AddedVertex { vertex_id: "org.simocracy.gathering:body.simScope" }
- AddedVertex AddedVertex { vertex_id: "org.simocracy.gathering:body.suggestedInterviewTemplates" }
- AddedVertex AddedVertex { vertex_id: "org.simocracy.gathering:body.suggestedInterviewTemplates:items" }
- AddedVertex AddedVertex { vertex_id: "org.simocracy.gathering:body.updatedAt" }
- AddedVertex AddedVertex { vertex_id: "org.simocracy.gathering:body.visibility" }
- AddedEdge AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.allocationMechanism", kind: "prop", name: Some("allocationMechanism") }
- AddedEdge AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.context", kind: "prop", name: Some("context") }
- AddedEdge AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.contextFacets", kind: "prop", name: Some("contextFacets") }
- AddedEdge AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.logo", kind: "prop", name: Some("logo") }
- AddedEdge AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.proposalScope", kind: "prop", name: Some("proposalScope") }
- AddedEdge AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.simScope", kind: "prop", name: Some("simScope") }
- AddedEdge AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.suggestedInterviewTemplates", kind: "prop", name: Some("suggestedInterviewTemplates") }
- AddedEdge AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.updatedAt", kind: "prop", name: Some("updatedAt") }
- AddedEdge AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.visibility", kind: "prop", name: Some("visibility") }
- AddedEdge AddedEdge { src: "org.simocracy.gathering:body.contextFacets", tgt: "org.simocracy.gathering:body.contextFacets:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "org.simocracy.gathering:body.contextFacets:items", tgt: "app.bsky.richtext.facet", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "org.simocracy.gathering:body.suggestedInterviewTemplates", tgt: "org.simocracy.gathering:body.suggestedInterviewTemplates:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "org.simocracy.gathering:body.suggestedInterviewTemplates:items", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "org.simocracy.gathering:body.allocationMechanism" }AddedVertex { vertex_id: "org.simocracy.gathering:body.context" }AddedVertex { vertex_id: "org.simocracy.gathering:body.contextFacets" }AddedVertex { vertex_id: "org.simocracy.gathering:body.contextFacets:items" }AddedVertex { vertex_id: "org.simocracy.gathering:body.logo" }AddedVertex { vertex_id: "org.simocracy.gathering:body.proposalScope" }AddedVertex { vertex_id: "org.simocracy.gathering:body.simScope" }AddedVertex { vertex_id: "org.simocracy.gathering:body.suggestedInterviewTemplates" }AddedVertex { vertex_id: "org.simocracy.gathering:body.suggestedInterviewTemplates:items" }AddedVertex { vertex_id: "org.simocracy.gathering:body.updatedAt" }AddedVertex { vertex_id: "org.simocracy.gathering:body.visibility" }
Additional Notes
- Non-breaking: AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.allocationMechanism", kind: "prop", name: Some("allocationMechanism") }
- Non-breaking: AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.context", kind: "prop", name: Some("context") }
- Non-breaking: AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.contextFacets", kind: "prop", name: Some("contextFacets") }
- Non-breaking: AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.logo", kind: "prop", name: Some("logo") }
- Non-breaking: AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.proposalScope", kind: "prop", name: Some("proposalScope") }
- Non-breaking: AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.simScope", kind: "prop", name: Some("simScope") }
- Non-breaking: AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.suggestedInterviewTemplates", kind: "prop", name: Some("suggestedInterviewTemplates") }
- Non-breaking: AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.updatedAt", kind: "prop", name: Some("updatedAt") }
- Non-breaking: AddedEdge { src: "org.simocracy.gathering:body", tgt: "org.simocracy.gathering:body.visibility", kind: "prop", name: Some("visibility") }
- Non-breaking: AddedEdge { src: "org.simocracy.gathering:body.contextFacets", tgt: "org.simocracy.gathering:body.contextFacets:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "org.simocracy.gathering:body.contextFacets:items", tgt: "app.bsky.richtext.facet", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "org.simocracy.gathering:body.suggestedInterviewTemplates", tgt: "org.simocracy.gathering:body.suggestedInterviewTemplates:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "org.simocracy.gathering:body.suggestedInterviewTemplates:items", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
1
1
{
2
2
"id": "org.simocracy.gathering",
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
"name",
11
11
"gatheringType",
12
12
"status",
13
13
"createdAt"
14
14
],
15
15
"properties": {
16
16
"url": {
17
17
"type": "string",
18
18
"maxLength": 5000,
19
19
"description": "External link (e.g. Luma registration page)"
20
20
},
21
+
"logo": {
22
+
"type": "blob",
23
+
"accept": [
24
+
"image/png",
25
+
"image/jpeg",
26
+
"image/webp"
27
+
],
28
+
"maxSize": 1000000,
29
+
"description": "Square community logo displayed in navigation rails, pickers, and community cards."
30
+
},
21
31
"name": {
22
32
"type": "string",
23
33
"maxLength": 3000,
24
34
"description": "Display name of the event",
25
35
"maxGraphemes": 300
26
36
},
27
37
"dates": {
28
38
"type": "string",
29
39
"maxLength": 1000,
30
40
"description": "Human-readable date range (e.g. March 14-15, 2026)",
31
41
"maxGraphemes": 100
32
42
},
33
43
"image": {
34
44
"type": "blob",
35
45
"accept": [
36
46
"image/png",
37
47
"image/jpeg",
38
48
"image/webp"
39
49
],
40
50
"maxSize": 1000000,
41
51
"description": "Cover image for the event (ATProto blob)"
42
52
},
43
53
"status": {
44
54
"type": "string",
45
55
"description": "Current status of the gathering",
46
56
"knownValues": [
47
57
"application",
48
58
"upcoming",
49
59
"active",
50
60
"completed"
51
61
]
52
62
},
63
+
"context": {
64
+
"type": "string",
65
+
"description": "Background / briefing material for sims participating in this event. Shown to AI sims as event context so they can act efficiently (e.g. prior decisions, mission, constraints, data, links). Unbounded — length constrained only by ATProto's per-record size limit."
66
+
},
53
67
"simSize": {
54
68
"type": "string",
55
69
"description": "Size of sim avatars in this gathering's world. large=48px, normal=32px (senate default), small=20px (ftc-sf default).",
56
70
"knownValues": [
57
71
"large",
58
72
"normal",
59
73
"small"
60
74
]
61
75
},
62
76
"appRoute": {
63
77
"type": "string",
64
78
"maxLength": 1000,
65
79
"description": "Internal app route path (e.g. /senate, /ftc-sf) for built-in events"
66
80
},
67
81
"location": {
68
82
"type": "string",
69
83
"maxLength": 3000,
70
84
"description": "Physical or virtual location",
71
85
"maxGraphemes": 300
72
86
},
87
+
"simScope": {
88
+
"type": "string",
89
+
"description": "Which sims walk around in this gathering's world. council=only appointed council sims (default), all=every sim in Simocracy.",
90
+
"knownValues": [
91
+
"council",
92
+
"all"
93
+
]
94
+
},
73
95
"createdAt": {
74
96
"type": "string",
75
97
"format": "datetime",
76
98
"description": "Timestamp when the record was created"
77
99
},
100
+
"updatedAt": {
101
+
"type": "string",
102
+
"format": "datetime",
103
+
"description": "Timestamp when the gathering was last updated"
104
+
},
105
+
"visibility": {
106
+
"type": "string",
107
+
"description": "Whether this gathering is listed in public overviews. public=shown in the events gallery, profile pages, etc. (default). private=hidden from every overview list; only the creator sees it in their own listings, but anyone with the direct AT-URI / DID-PLC link or canonical slug URL can still load the detail page.",
108
+
"knownValues": [
109
+
"public",
110
+
"private"
111
+
]
112
+
},
78
113
"councilSims": {
79
114
"type": "array",
80
115
"items": {
81
116
"ref": "com.atproto.repo.strongRef",
82
117
"type": "ref"
83
118
},
84
119
"maxLength": 50,
85
120
"description": "Array of StrongRefs to sim records appointed to this gathering's council by the event creator."
86
121
},
87
122
"description": {
88
123
"type": "string",
89
124
"maxLength": 30000,
90
125
"description": "Full event description with details, agenda, etc.",
91
126
"maxGraphemes": 3000
92
127
},
93
128
"treasuryUsd": {
94
129
"type": "integer",
95
130
"minimum": 0,
96
131
"description": "Optional agentic treasury amount in USD that the council governs."
97
132
},
98
133
"collectionUri": {
99
134
"type": "string",
100
135
"maxLength": 5000,
101
136
"description": "AT-URI of an org.hypercerts.collection record for this gathering's proposals."
102
137
},
138
+
"contextFacets": {
139
+
"type": "array",
140
+
"items": {
141
+
"ref": "app.bsky.richtext.facet",
142
+
"type": "ref"
143
+
},
144
+
"description": "Rich text facets for context"
145
+
},
103
146
"gatheringType": {
104
147
"type": "string",
105
148
"description": "Type of gathering",
106
149
"knownValues": [
107
150
"funding",
108
151
"governance",
109
152
"hybrid"
110
153
]
111
154
},
155
+
"proposalScope": {
156
+
"type": "string",
157
+
"description": "Who can submit proposals to this gathering. council=only users who own at least one sim on the appointed council (event creator always allowed), all=anyone signed in (default).",
158
+
"knownValues": [
159
+
"council",
160
+
"all"
161
+
]
162
+
},
112
163
"buildingImageUrl": {
113
164
"type": "string",
114
165
"maxLength": 5000,
115
166
"description": "URL of the building/venue image for this gathering. Can be an absolute URL or a path relative to the app (e.g. /senate.png, /frontiertower.webp)."
116
167
},
117
168
"shortDescription": {
118
169
"type": "string",
119
170
"maxLength": 3000,
120
171
"description": "Brief summary for cards and previews",
121
172
"maxGraphemes": 300
122
173
},
123
174
"descriptionFacets": {
124
175
"type": "array",
125
176
"items": {
126
177
"ref": "app.bsky.richtext.facet",
127
178
"type": "ref"
128
179
},
129
180
"description": "Rich text facets for description"
130
181
},
182
+
"allocationMechanism": {
183
+
"type": "string",
184
+
"description": "The mechanism used to allocate the treasury among proposals.",
185
+
"knownValues": [
186
+
"quadratic-funding",
187
+
"s-process",
188
+
"condorcet"
189
+
]
190
+
},
131
191
"shortDescriptionFacets": {
132
192
"type": "array",
133
193
"items": {
134
194
"ref": "app.bsky.richtext.facet",
135
195
"type": "ref"
136
196
},
137
197
"description": "Rich text facets for shortDescription"
198
+
},
199
+
"suggestedInterviewTemplates": {
200
+
"type": "array",
201
+
"items": {
202
+
"ref": "com.atproto.repo.strongRef",
203
+
"type": "ref"
204
+
},
205
+
"maxLength": 5,
206
+
"description": "Optional: interview templates this gathering suggests to prospective council members."
138
207
}
139
208
}
140
209
},
141
210
"description": "A governance or funding event that users can create and participate in."
142
211
}
143
212
},
144
213
"$type": "com.atproto.lexicon.schema",
145
214
"lexicon": 1
146
215
}