world.treeline.activity.record
Schema Diff
+9 -0
Compatibility Analysis
Backward Compatible
Backward compatible. 4 non-breaking changes.
Non-Breaking Changes (4)
- AddedVertex AddedVertex { vertex_id: "world.treeline.activity.record:body.coAthletes" }
- AddedVertex AddedVertex { vertex_id: "world.treeline.activity.record:body.coAthletes:items" }
- AddedEdge AddedEdge { src: "world.treeline.activity.record:body", tgt: "world.treeline.activity.record:body.coAthletes", kind: "prop", name: Some("coAthletes") }
- AddedEdge AddedEdge { src: "world.treeline.activity.record:body.coAthletes", tgt: "world.treeline.activity.record:body.coAthletes:items", kind: "items", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "world.treeline.activity.record:body.coAthletes" }AddedVertex { vertex_id: "world.treeline.activity.record:body.coAthletes:items" }
Additional Notes
- Non-breaking: AddedEdge { src: "world.treeline.activity.record:body", tgt: "world.treeline.activity.record:body.coAthletes", kind: "prop", name: Some("coAthletes") }
- Non-breaking: AddedEdge { src: "world.treeline.activity.record:body.coAthletes", tgt: "world.treeline.activity.record:body.coAthletes:items", kind: "items", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"deviceMetadata": {
5
5
"description": "Metadata about the recording hardware or sensor device.",
6
6
"properties": {
7
7
"manufacturer": {
8
8
"description": "Manufacturer name (e.g. Garmin, Wahoo, COROS, Apple).",
9
9
"maxLength": 100,
10
10
"type": "string"
11
11
},
12
12
"model": {
13
13
"description": "Device model name (e.g. Forerunner 965, ELEMNT BOLT, Apple Watch Ultra).",
14
14
"maxLength": 100,
15
15
"type": "string"
16
16
}
17
17
},
18
18
"type": "object"
19
19
},
20
20
"geometry": {
21
21
"description": "Simplified GeoJSON LineString geometry representing the activity path.",
22
22
"properties": {
23
23
"coordinates": {
24
24
"description": "RDP-simplified array of coordinate tuples [lon, lat, ele?].",
25
25
"items": {
26
26
"type": "unknown"
27
27
},
28
28
"maxLength": 500,
29
29
"type": "array"
30
30
},
31
31
"type": {
32
32
"const": "LineString",
33
33
"description": "GeoJSON geometry type specifier.",
34
34
"type": "string"
35
35
}
36
36
},
37
37
"required": [
38
38
"type",
39
39
"coordinates"
40
40
],
41
41
"type": "object"
42
42
},
43
43
"main": {
44
44
"description": "A sports activity or outdoor adventure record logged on Treeline.",
45
45
"key": "tid",
46
46
"record": {
47
47
"properties": {
48
+
"coAthletes": {
49
+
"description": "DIDs of athletes who participated in this activity together.",
50
+
"items": {
51
+
"format": "did",
52
+
"type": "string"
53
+
},
54
+
"maxLength": 50,
55
+
"type": "array"
56
+
},
48
57
"createdAt": {
49
58
"description": "Record creation timestamp on client/PDS (ISO 8601 UTC format).",
50
59
"format": "datetime",
51
60
"type": "string"
52
61
},
53
62
"description": {
54
63
"description": "Detailed notes, trip report, weather observations, or gear notes.",
55
64
"maxGraphemes": 3000,
56
65
"maxLength": 30000,
57
66
"type": "string"
58
67
},
59
68
"deviceInfo": {
60
69
"description": "Recording hardware or sensor device metadata.",
61
70
"ref": "#deviceMetadata",
62
71
"type": "ref"
63
72
},
64
73
"endedAt": {
65
74
"description": "Timestamp when the activity finished (ISO 8601 UTC format).",
66
75
"format": "datetime",
67
76
"type": "string"
68
77
},
69
78
"gearRef": {
70
79
"description": "Optional reference to a world.treeline.gear.item used in this activity.",
71
80
"ref": "com.atproto.repo.strongRef",
72
81
"type": "ref"
73
82
},
74
83
"geometry": {
75
84
"description": "Simplified GeoJSON LineString path (recommended <= 250 points) for lightweight relay and feed distribution.",
76
85
"ref": "#geometry",
77
86
"type": "ref"
78
87
},
79
88
"hideStartEndMeters": {
80
89
"description": "Distance trimmed from each end of the public preview only. The original telemetry blob remains untrimmed and publicly retrievable.",
81
90
"maximum": 100000,
82
91
"minimum": 0,
83
92
"type": "integer"
84
93
},
85
94
"privacy": {
86
95
"default": "public",
87
96
"description": "AppView visibility, not confidentiality of the public repository or original blob. New clients publish public or unlisted; unsupported restricted values must fail closed.",
88
97
"knownValues": [
89
98
"public",
90
99
"unlisted",
91
100
"followers",
92
101
"private",
93
102
"permissioned"
94
103
],
95
104
"type": "string"
96
105
},
97
106
"rawBlob": {
98
107
"accept": [
99
108
"application/gpx+xml",
100
109
"application/vnd.ant.fit",
101
110
"application/vnd.garmin.tcx+xml",
102
111
"application/octet-stream",
103
112
"application/xml",
104
113
"text/xml"
105
114
],
106
115
"description": "Full-resolution original raw telemetry file (.fit, .gpx, .tcx) stored directly as an ATProto blob on the athlete's PDS.",
107
116
"maxSize": 52428800,
108
117
"type": "blob"
109
118
},
110
119
"route": {
111
120
"description": "Optional reference to a world.treeline.route.record course or trail guide followed.",
112
121
"ref": "com.atproto.repo.strongRef",
113
122
"type": "ref"
114
123
},
115
124
"routeRef": {
116
125
"description": "Optional reference to a world.treeline.route.record followed.",
117
126
"ref": "com.atproto.repo.strongRef",
118
127
"type": "ref"
119
128
},
120
129
"sport": {
121
130
"description": "Sport or activity type category.",
122
131
"knownValues": [
123
132
"run",
124
133
"trail_run",
125
134
"walk",
126
135
"hike",
127
136
"ride",
128
137
"mountain_bike",
129
138
"gravel_ride",
130
139
"e_bike",
131
140
"road_bike",
132
141
"handcycle",
133
142
"ski",
134
143
"snowboard",
135
144
"backcountry_ski",
136
145
"nordic_ski",
137
146
"roller_ski",
138
147
"swim",
139
148
"open_water_swim",
140
149
"kayak",
141
150
"canoe",
142
151
"rowing",
143
152
"paddleboard",
144
153
"surf",
145
154
"kitesurf",
146
155
"windsurf",
147
156
"sail",
148
157
"climb",
149
158
"boulder",
150
159
"mountaineering",
151
160
"wheelchair",
152
161
"workout",
153
162
"yoga",
154
163
"crossfit",
155
164
"weight_training",
156
165
"pilates",
157
166
"hiit",
158
167
"other"
159
168
],
160
169
"type": "string"
161
170
},
162
171
"startedAt": {
163
172
"description": "Timestamp when the activity started (ISO 8601 UTC format).",
164
173
"format": "datetime",
165
174
"type": "string"
166
175
},
167
176
"stats": {
168
177
"description": "Summary metrics and telemetry statistics for the activity.",
169
178
"ref": "#stats",
170
179
"type": "ref"
171
180
},
172
181
"tags": {
173
182
"description": "Categorization tags (e.g. race, commute, intervals, summits).",
174
183
"items": {
175
184
"maxLength": 64,
176
185
"type": "string"
177
186
},
178
187
"maxLength": 20,
179
188
"type": "array"
180
189
},
181
190
"title": {
182
191
"description": "Display title of the activity (e.g., Morning Trail Run, Grand Canyon R2R2R).",
183
192
"maxGraphemes": 300,
184
193
"maxLength": 3000,
185
194
"type": "string"
186
195
}
187
196
},
188
197
"required": [
189
198
"title",
190
199
"sport",
191
200
"startedAt",
192
201
"createdAt"
193
202
],
194
203
"type": "object"
195
204
},
196
205
"type": "record"
197
206
},
198
207
"stats": {
199
208
"description": "Summary telemetry metrics calculated from the raw activity dataset.",
200
209
"properties": {
201
210
"averageCadenceRpm": {
202
211
"description": "[Deprecated: use avgCadence] Average cadence in rpm or spm.",
203
212
"minimum": 0,
204
213
"type": "integer"
205
214
},
206
215
"averageHeartRateBpm": {
207
216
"description": "[Deprecated: use avgHeartRateBpm] Average heart rate in beats per minute.",
208
217
"maximum": 300,
209
218
"minimum": 0,
210
219
"type": "integer"
211
220
},
212
221
"averagePowerWatts": {
213
222
"description": "[Deprecated: use avgPowerWatts] Average power output in watts.",
214
223
"minimum": 0,
215
224
"type": "integer"
216
225
},
217
226
"averageSpeedMps": {
218
227
"description": "[Deprecated: use avgSpeedMps] Average moving speed in meters per second.",
219
228
"type": "unknown"
220
229
},
221
230
"avgCadence": {
222
231
"description": "Mean cadence (rpm or spm).",
223
232
"minimum": 0,
224
233
"type": "integer"
225
234
},
226
235
"avgCadenceRpm": {
227
236
"description": "Mean cadence in revolutions or steps per minute.",
228
237
"minimum": 0,
229
238
"type": "integer"
230
239
},
231
240
"avgHeartRateBpm": {
232
241
"description": "Mean heart rate in beats per minute.",
233
242
"maximum": 300,
234
243
"minimum": 0,
235
244
"type": "integer"
236
245
},
237
246
"avgPowerWatts": {
238
247
"description": "Mean power output in watts from a recorded sensor.",
239
248
"minimum": 0,
240
249
"type": "integer"
241
250
},
242
251
"avgSpeedMps": {
243
252
"description": "Calculated mean moving speed in meters per second.",
244
253
"type": "unknown"
245
254
},
246
255
"calories": {
247
256
"description": "Estimated energy expenditure in kilocalories.",
248
257
"minimum": 0,
249
258
"type": "integer"
250
259
},
251
260
"distanceMeters": {
252
261
"description": "Total distance traveled in meters.",
253
262
"minimum": 0,
254
263
"type": "integer"
255
264
},
256
265
"durationSeconds": {
257
266
"description": "[Deprecated: use elapsedDurationSeconds] Total elapsed time in seconds.",
258
267
"minimum": 0,
259
268
"type": "integer"
260
269
},
261
270
"elapsedDurationSeconds": {
262
271
"description": "Total elapsed time including pauses in seconds.",
263
272
"minimum": 0,
264
273
"type": "integer"
265
274
},
266
275
"elevationGainMeters": {
267
276
"description": "Cumulative elevation gain in meters.",
268
277
"minimum": 0,
269
278
"type": "integer"
270
279
},
271
280
"elevationLossMeters": {
272
281
"description": "Cumulative elevation loss in meters.",
273
282
"minimum": 0,
274
283
"type": "integer"
275
284
},
276
285
"energyKilojoules": {
277
286
"description": "Total mechanical work in kilojoules (session.total_work or avgPowerWatts * movingDurationSeconds / 1000).",
278
287
"minimum": 0,
279
288
"type": "integer"
280
289
},
281
290
"maxHeartRateBpm": {
282
291
"description": "Maximum recorded heart rate in beats per minute.",
283
292
"maximum": 300,
284
293
"minimum": 0,
285
294
"type": "integer"
286
295
},
287
296
"maxPowerWatts": {
288
297
"description": "Maximum power output in watts.",
289
298
"minimum": 0,
290
299
"type": "integer"
291
300
},
292
301
"maxSpeedMps": {
293
302
"description": "Maximum recorded speed in meters per second.",
294
303
"type": "unknown"
295
304
},
296
305
"movingDurationSeconds": {
297
306
"description": "Active moving duration excluding pauses in seconds.",
298
307
"minimum": 0,
299
308
"type": "integer"
300
309
},
301
310
"movingTimeSeconds": {
302
311
"description": "[Deprecated: use movingDurationSeconds] Total moving time excluding pauses in seconds.",
303
312
"minimum": 0,
304
313
"type": "integer"
305
314
},
306
315
"temperatureCelsius": {
307
316
"description": "Average ambient temperature in degrees Celsius.",
308
317
"type": "integer"
309
318
}
310
319
},
311
320
"type": "object"
312
321
}
313
322
},
314
323
"id": "world.treeline.activity.record",
315
324
"lexicon": 1
316
325
}