world.treeline.route.record

treeline.world

Schema Diff

+5 -0

From

CID
bafyreifvibzrcyy...
Indexed At
2026-09-25 14:12 UTC
View this version

To

CID
bafyreiaqxhwuswh...
Indexed At
2026-10-04 16:30 UTC
View this version

Compatibility Analysis

Backward Compatible

Backward compatible. 3 non-breaking changes.

Non-Breaking Changes (3)
  • AddedVertex AddedVertex { vertex_id: "world.treeline.route.record:body.clonedFrom" }
  • AddedEdge AddedEdge { src: "world.treeline.route.record:body", tgt: "world.treeline.route.record:body.clonedFrom", kind: "prop", name: Some("clonedFrom") }
  • AddedEdge AddedEdge { src: "world.treeline.route.record:body.clonedFrom", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }

Migration Guidance

Added Elements

  • AddedVertex { vertex_id: "world.treeline.route.record:body.clonedFrom" }

Additional Notes

  • Non-breaking: AddedEdge { src: "world.treeline.route.record:body", tgt: "world.treeline.route.record:body.clonedFrom", kind: "prop", name: Some("clonedFrom") }
  • Non-breaking: AddedEdge { src: "world.treeline.route.record:body.clonedFrom", tgt: "com.atproto.repo.strongRef", kind: "ref", name: None }
1 1
{
2 2
  "$type": "com.atproto.lexicon.schema",
3 3
  "defs": {
4 4
    "externalIds": {
5 5
      "description": "Cross-references to public open mapping registries.",
6 6
      "properties": {
7 7
        "cotrexId": {
8 8
          "description": "Colorado Trail Explorer (COTREX) feature ID.",
9 9
          "type": "string"
10 10
        },
11 11
        "openTrailsId": {
12 12
          "description": "OpenTrails standard dataset feature identifier.",
13 13
          "type": "string"
14 14
        },
15 15
        "osmRelationId": {
16 16
          "description": "OpenStreetMap Relation ID.",
17 17
          "type": "string"
18 18
        },
19 19
        "osmWayId": {
20 20
          "description": "OpenStreetMap Way ID.",
21 21
          "type": "string"
22 22
        },
23 23
        "usfsTrailNumber": {
24 24
          "description": "US Forest Service official trail designation number (e.g., '514' for Hermosa Creek).",
25 25
          "type": "string"
26 26
        },
27 27
        "wikidataId": {
28 28
          "description": "Wikidata entity identifier.",
29 29
          "type": "string"
30 30
        }
31 31
      },
32 32
      "type": "object"
33 33
    },
34 34
    "gradeStats": {
35 35
      "description": "Gradient statistics for climbs, descents, or trail segments.",
36 36
      "properties": {
37 37
        "averageGradePct": {
38 38
          "description": "Average slope gradient percentage (e.g. '7.5' for 7.5% climb, '-6.2' for descent).",
39 39
          "type": "string"
40 40
        },
41 41
        "climbCategory": {
42 42
          "description": "[Deprecated in v0.10: Use world.treeline.segment.record for competitive climb categorization.] Standard cycling/running climb category.",
43 43
          "knownValues": [
44 44
            "HC",
45 45
            "1",
46 46
            "2",
47 47
            "3",
48 48
            "4",
49 49
            "uncategorized"
50 50
          ],
51 51
          "type": "string"
52 52
        },
53 53
        "maxGradePct": {
54 54
          "description": "Maximum slope gradient percentage.",
55 55
          "type": "string"
56 56
        }
57 57
      },
58 58
      "type": "object"
59 59
    },
60 60
    "main": {
61 61
      "description": "A curated trail guide, course, or route record published on Treeline.",
62 62
      "key": "tid",
63 63
      "record": {
64 64
        "properties": {
65 +
          "clonedFrom": {
66 +
            "description": "Optional reference to the activity or route this record was saved from (Save as Route). The AppView checks the source's reuse rules and hides this route when they are not met.",
67 +
            "ref": "com.atproto.repo.strongRef",
68 +
            "type": "ref"
69 +
          },
65 70
          "constituentTrails": {
66 71
            "description": "Ordered physical trails comprising this route guide.",
67 72
            "items": {
68 73
              "ref": "#routeTrailSegment",
69 74
              "type": "ref"
70 75
            },
71 76
            "type": "array"
72 77
          },
73 78
          "courseBlob": {
74 79
            "accept": [
75 80
              "application/gpx+xml",
76 81
              "application/vnd.ant.fit",
77 82
              "application/vnd.garmin.tcx+xml",
78 83
              "application/octet-stream",
79 84
              "application/xml",
80 85
              "text/xml"
81 86
            ],
82 87
            "description": "Downloadable GPX/FIT course file with turn-by-turn cue sheets.",
83 88
            "maxSize": 52428800,
84 89
            "type": "blob"
85 90
          },
86 91
          "createdAt": {
87 92
            "description": "Creation timestamp.",
88 93
            "format": "datetime",
89 94
            "type": "string"
90 95
          },
91 96
          "cuePoints": {
92 97
            "description": "Turn-by-turn navigational cues along the course.",
93 98
            "items": {
94 99
              "ref": "#routeCuePoint",
95 100
              "type": "ref"
96 101
            },
97 102
            "type": "array"
98 103
          },
99 104
          "description": {
100 105
            "description": "Detailed guide, route directions, access notes, seasonal conditions, and water availability.",
101 106
            "maxGraphemes": 5000,
102 107
            "maxLength": 50000,
103 108
            "type": "string"
104 109
          },
105 110
          "difficulty": {
106 111
            "description": "Technical and physical difficulty assessment.",
107 112
            "knownValues": [
108 113
              "easy",
109 114
              "moderate",
110 115
              "hard",
111 116
              "expert",
112 117
              "extreme"
113 118
            ],
114 119
            "type": "string"
115 120
          },
116 121
          "externalIds": {
117 122
            "description": "External open mapping identifiers (OSM, COTREX, USFS, OpenTrails, Wikidata).",
118 123
            "ref": "#externalIds",
119 124
            "type": "ref"
120 125
          },
121 126
          "geometry": {
122 127
            "description": "Simplified GeoJSON LineString geometry of the route path.",
123 128
            "ref": "#routeGeometry",
124 129
            "type": "ref"
125 130
          },
126 131
          "gradeStats": {
127 132
            "description": "Gradient profile and climb categorization for climbs or descents.",
128 133
            "ref": "#gradeStats",
129 134
            "type": "ref"
130 135
          },
131 136
          "location": {
132 137
            "description": "Geographical region or park name (e.g. White Mountains, NH).",
133 138
            "maxGraphemes": 200,
134 139
            "maxLength": 2000,
135 140
            "type": "string"
136 141
          },
137 142
          "parentRoute": {
138 143
            "description": "Reference to parent canonical trail or larger trail system if this route is a sub-segment or loop.",
139 144
            "ref": "com.atproto.repo.strongRef",
140 145
            "type": "ref"
141 146
          },
142 147
          "pointsOfInterest": {
143 148
            "description": "Generic strongRefs to any location-based pins, check-ins, summits, water sources, or hazard records across the ATmosphere.",
144 149
            "items": {
145 150
              "ref": "com.atproto.repo.strongRef",
146 151
              "type": "ref"
147 152
            },
148 153
            "type": "array"
149 154
          },
150 155
          "privacy": {
151 156
            "default": "public",
152 157
            "description": "Privacy visibility setting for this route or segment.",
153 158
            "knownValues": [
154 159
              "public",
155 160
              "unlisted",
156 161
              "followers",
157 162
              "private"
158 163
            ],
159 164
            "type": "string"
160 165
          },
161 166
          "rawBlob": {
162 167
            "accept": [
163 168
              "application/gpx+xml",
164 169
              "application/vnd.ant.fit",
165 170
              "application/vnd.garmin.tcx+xml",
166 171
              "application/octet-stream",
167 172
              "application/xml",
168 173
              "text/xml"
169 174
            ],
170 175
            "description": "High-resolution GPX/FIT course file blob.",
171 176
            "maxSize": 52428800,
172 177
            "type": "blob"
173 178
          },
174 179
          "relatedRecords": {
175 180
            "description": "Generic strongRefs to related network content (e.g. Bluesky trip report posts, photo records, gear lists).",
176 181
            "items": {
177 182
              "ref": "com.atproto.repo.strongRef",
178 183
              "type": "ref"
179 184
            },
180 185
            "type": "array"
181 186
          },
182 187
          "routeType": {
183 188
            "description": "Topological structure of the route.",
184 189
            "knownValues": [
185 190
              "loop",
186 191
              "out_and_back",
187 192
              "point_to_point"
188 193
            ],
189 194
            "type": "string"
190 195
          },
191 196
          "segmentType": {
192 197
            "description": "[Deprecated in v0.10: Competitive segments use world.treeline.segment.record. Retained for backward compatibility.] Functional classification of the route or segment.",
193 198
            "knownValues": [
194 199
              "trail",
195 200
              "loop",
196 201
              "climb",
197 202
              "descent",
198 203
              "sprint",
199 204
              "traverse"
200 205
            ],
201 206
            "type": "string"
202 207
          },
203 208
          "segments": {
204 209
            "description": "Ordered sub-segments or constituent trails that make up this composite route or loop.",
205 210
            "items": {
206 211
              "ref": "#routeSegmentItem",
207 212
              "type": "ref"
208 213
            },
209 214
            "type": "array"
210 215
          },
211 216
          "source": {
212 217
            "default": "user",
213 218
            "description": "Data provenance source.",
214 219
            "knownValues": [
215 220
              "user",
216 221
              "osm",
217 222
              "cotrex",
218 223
              "usfs",
219 224
              "opentrails",
220 225
              "community"
221 226
            ],
222 227
            "type": "string"
223 228
          },
224 229
          "sourceActivity": {
225 230
            "description": "StrongRef to the activity record from which this segment was extracted or initiated.",
226 231
            "ref": "com.atproto.repo.strongRef",
227 232
            "type": "ref"
228 233
          },
229 234
          "sport": {
230 235
            "description": "Applicable sports or disciplines for this route (e.g., hike, trail_run, gravel_ride).",
231 236
            "items": {
232 237
              "type": "string"
233 238
            },
234 239
            "type": "array"
235 240
          },
236 241
          "stats": {
237 242
            "description": "Route distance and elevation profile metrics.",
238 243
            "ref": "#routeStats",
239 244
            "type": "ref"
240 245
          },
241 246
          "surface": {
242 247
            "description": "Surface composition types (e.g. singletrack, dirt_road, paved, rock_scramble, snow).",
243 248
            "items": {
244 249
              "type": "string"
245 250
            },
246 251
            "type": "array"
247 252
          },
248 253
          "title": {
249 254
            "description": "Title or route name (e.g., Mount Rainier Wonderland Trail).",
250 255
            "maxGraphemes": 300,
251 256
            "maxLength": 3000,
252 257
            "type": "string"
253 258
          },
254 259
          "updatedAt": {
255 260
            "description": "Last updated timestamp.",
256 261
            "format": "datetime",
257 262
            "type": "string"
258 263
          },
259 264
          "waypoints": {
260 265
            "description": "References to waypoint records along this route.",
261 266
            "items": {
262 267
              "ref": "com.atproto.repo.strongRef",
263 268
              "type": "ref"
264 269
            },
265 270
            "type": "array"
266 271
          }
267 272
        },
268 273
        "required": [
269 274
          "title",
270 275
          "createdAt"
271 276
        ],
272 277
        "type": "object"
273 278
      },
274 279
      "type": "record"
275 280
    },
276 281
    "routeCuePoint": {
277 282
      "properties": {
278 283
        "coordinate": {
279 284
          "description": "Optional coordinate tuple [lon, lat, ele?] of the cue point.",
280 285
          "type": "unknown"
281 286
        },
282 287
        "distanceMeters": {
283 288
          "description": "Chainage offset along the route in meters.",
284 289
          "type": "integer"
285 290
        },
286 291
        "instruction": {
287 292
          "description": "Navigation instruction (e.g. Turn left at junction onto Colorado Trail).",
288 293
          "type": "string"
289 294
        }
290 295
      },
291 296
      "required": [
292 297
        "distanceMeters",
293 298
        "instruction"
294 299
      ],
295 300
      "type": "object"
296 301
    },
297 302
    "routeGeometry": {
298 303
      "description": "GeoJSON LineString representing the route path.",
299 304
      "properties": {
300 305
        "coordinates": {
301 306
          "description": "Simplified coordinate tuples array.",
302 307
          "items": {
303 308
            "type": "unknown"
304 309
          },
305 310
          "maxLength": 500,
306 311
          "type": "array"
307 312
        },
308 313
        "type": {
309 314
          "const": "LineString",
310 315
          "description": "GeoJSON geometry type.",
311 316
          "type": "string"
312 317
        }
313 318
      },
314 319
      "required": [
315 320
        "type",
316 321
        "coordinates"
317 322
      ],
318 323
      "type": "object"
319 324
    },
320 325
    "routeSegmentItem": {
321 326
      "description": "A constituent sub-segment or trail section in a composite route.",
322 327
      "properties": {
323 328
        "endKm": {
324 329
          "description": "Ending kilometer offset on the referenced route.",
325 330
          "type": "unknown"
326 331
        },
327 332
        "name": {
328 333
          "description": "Name or title of the constituent segment.",
329 334
          "maxGraphemes": 300,
330 335
          "type": "string"
331 336
        },
332 337
        "order": {
333 338
          "description": "1-based sequence order in the route traversal.",
334 339
          "minimum": 1,
335 340
          "type": "integer"
336 341
        },
337 342
        "reverseDirection": {
338 343
          "description": "True if the constituent segment is traversed in reverse direction.",
339 344
          "type": "boolean"
340 345
        },
341 346
        "route": {
342 347
          "description": "StrongRef to the route record representing this segment.",
343 348
          "ref": "com.atproto.repo.strongRef",
344 349
          "type": "ref"
345 350
        },
346 351
        "startKm": {
347 352
          "description": "Starting kilometer offset on the referenced route.",
348 353
          "type": "unknown"
349 354
        }
350 355
      },
351 356
      "required": [
352 357
        "order"
353 358
      ],
354 359
      "type": "object"
355 360
    },
356 361
    "routeStats": {
357 362
      "description": "Distance and elevation stats for the route.",
358 363
      "properties": {
359 364
        "distanceMeters": {
360 365
          "description": "Total route distance in meters.",
361 366
          "minimum": 0,
362 367
          "type": "integer"
363 368
        },
364 369
        "elevationGainMeters": {
365 370
          "description": "Total cumulative ascent in meters.",
366 371
          "minimum": 0,
367 372
          "type": "integer"
368 373
        },
369 374
        "elevationLossMeters": {
370 375
          "description": "Total cumulative descent in meters.",
371 376
          "minimum": 0,
372 377
          "type": "integer"
373 378
        },
374 379
        "estimatedDurationSeconds": {
375 380
          "description": "Estimated moving duration in seconds for an average pace.",
376 381
          "minimum": 0,
377 382
          "type": "integer"
378 383
        },
379 384
        "highestPointMeters": {
380 385
          "description": "Maximum elevation on the route in meters.",
381 386
          "type": "integer"
382 387
        },
383 388
        "lowestPointMeters": {
384 389
          "description": "Minimum elevation on the route in meters.",
385 390
          "type": "integer"
386 391
        }
387 392
      },
388 393
      "type": "object"
389 394
    },
390 395
    "routeTrailSegment": {
391 396
      "properties": {
392 397
        "reverseDirection": {
393 398
          "default": false,
394 399
          "description": "Whether the trail is traversed in reverse direction.",
395 400
          "type": "boolean"
396 401
        },
397 402
        "sequenceOrder": {
398 403
          "description": "1-based order in traversal sequence.",
399 404
          "type": "integer"
400 405
        },
401 406
        "trailId": {
402 407
          "description": "Identifier of underlying physical trail.",
403 408
          "type": "string"
404 409
        }
405 410
      },
406 411
      "required": [
407 412
        "trailId"
408 413
      ],
409 414
      "type": "object"
410 415
    }
411 416
  },
412 417
  "id": "world.treeline.route.record",
413 418
  "lexicon": 1
414 419
}

Compare Other Versions

Lexicon Garden

@