From
bafyreibvkiqkuwulcvoa5m7hoytlitne2qmejmq6y46puuf2e7u3hsdytm
indexed 2026-10-21 17:40 UTC
View this version
To
bafyreibyvzuoucizckkhjuxhljd7dg6a2aoqqx3cqyijdow6hjh7inu2bu
indexed 2026-11-09 20:40 UTC
View this version
Compatibility
backward compatible Backward compatible. 10 non-breaking changes.
Non-breaking changes (10)
- AddedVertex AddedVertex { vertex_id: "com.atproto.label.defs#selfLabels" }
- AddedVertex AddedVertex { vertex_id: "world.treeline.segment.record:body.labels" }
- AddedVertex AddedVertex { vertex_id: "world.treeline.segment.record:body.labels:variant0" }
- AddedVertex AddedVertex { vertex_id: "world.treeline.segment.record:body.langs" }
- AddedVertex AddedVertex { vertex_id: "world.treeline.segment.record:body.langs:items" }
- AddedEdge AddedEdge { src: "world.treeline.segment.record:body", tgt: "world.treeline.segment.record:body.labels", kind: "prop", name: Some("labels") }
- AddedEdge AddedEdge { src: "world.treeline.segment.record:body", tgt: "world.treeline.segment.record:body.langs", kind: "prop", name: Some("langs") }
- AddedEdge AddedEdge { src: "world.treeline.segment.record:body.labels", tgt: "world.treeline.segment.record:body.labels:variant0", kind: "variant", name: Some("com.atproto.label.defs#selfLabels") }
- AddedEdge AddedEdge { src: "world.treeline.segment.record:body.labels:variant0", tgt: "com.atproto.label.defs#selfLabels", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "world.treeline.segment.record:body.langs", tgt: "world.treeline.segment.record:body.langs:items", kind: "items", name: None }
Migration guidance
Added
AddedVertex { vertex_id: "com.atproto.label.defs#selfLabels" }AddedVertex { vertex_id: "world.treeline.segment.record:body.labels" }AddedVertex { vertex_id: "world.treeline.segment.record:body.labels:variant0" }AddedVertex { vertex_id: "world.treeline.segment.record:body.langs" }AddedVertex { vertex_id: "world.treeline.segment.record:body.langs:items" }
Notes
- Non-breaking: AddedEdge { src: "world.treeline.segment.record:body", tgt: "world.treeline.segment.record:body.labels", kind: "prop", name: Some("labels") }
- Non-breaking: AddedEdge { src: "world.treeline.segment.record:body", tgt: "world.treeline.segment.record:body.langs", kind: "prop", name: Some("langs") }
- Non-breaking: AddedEdge { src: "world.treeline.segment.record:body.labels", tgt: "world.treeline.segment.record:body.labels:variant0", kind: "variant", name: Some("com.atproto.label.defs#selfLabels") }
- Non-breaking: AddedEdge { src: "world.treeline.segment.record:body.labels:variant0", tgt: "com.atproto.label.defs#selfLabels", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "world.treeline.segment.record:body.langs", tgt: "world.treeline.segment.record:body.langs:items", kind: "items", name: None }
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {44
"externalTrailIds": {55
"properties": {66
"cotrexId": {77
"description": "COTREX trail feature identifier.",88
"type": "string"99
},1010
"osmRelationId": {1111
"description": "OpenStreetMap relation identifier.",1212
"type": "string"1313
},1414
"osmWayId": {1515
"description": "OpenStreetMap way identifier.",1616
"type": "string"1717
},1818
"usfsTrailNumber": {1919
"description": "United States Forest Service trail identifier.",2020
"type": "string"2121
}2222
},2323
"type": "object"2424
},2525
"gradeStats": {2626
"properties": {2727
"avgGradePct": {2828
"description": "Mean gradient percentage (as a decimal string, e.g. '12.5').",2929
"type": "string"3030
},3131
"climbCategory": {3232
"description": "Standard climb category rating.",3333
"knownValues": [3434
"HC",3535
"1",3636
"2",3737
"3",3838
"4",3939
"uncategorized"4040
],4141
"type": "string"4242
},4343
"maxGradePct": {4444
"description": "Peak gradient percentage (as a decimal string, e.g. '18.2').",4545
"type": "string"4646
}4747
},4848
"type": "object"4949
},5050
"main": {5151
"description": "A competitive trail timing segment with defined start/finish gates.",5252
"key": "tid",5353
"record": {5454
"properties": {5555
"createdAt": {5656
"description": "Segment creation timestamp.",5757
"format": "datetime",5858
"type": "string"5959
},6060
"description": {6161
"description": "Optional notes or description of the segment terrain.",6262
"maxGraphemes": 2000,6363
"maxLength": 20000,6464
"type": "string"6565
},6666
"directionality": {6767
"default": "forward",6868
"description": "Directionality of timing traversal.",6969
"knownValues": [7070
"forward",7171
"reverse",7272
"out_and_back"7373
],7474
"type": "string"7575
},7676
"endGate": {7777
"description": "End timing gate coordinate and tolerance radius.",7878
"ref": "#timingGate",7979
"type": "ref"8080
},8181
"geometry": {8282
"description": "Canonical polyline geometry for map matching.",8383
"ref": "#simplifiedLineString",8484
"type": "ref"8585
},8686
"gradeStats": {8787
"description": "Gradient statistics and climb category.",8888
"ref": "#gradeStats",8989
"type": "ref"9090
},91
"labels": {92
"description": "Optional self-label values the author applies to this record, effectively content warnings (e.g. graphic-media for an injury photo).",93
"refs": [94
"com.atproto.label.defs#selfLabels"95
],96
"type": "union"97
},98
"langs": {99
"description": "Optional. The human languages of this record's text (the title and description), as BCP-47 tags, so consumers can filter or translate.",100
"items": {101
"format": "language",102
"type": "string"103
},104
"maxLength": 3,105
"type": "array"106
},91107
"physicalTrailRef": {92108
"description": "Public authoritative trail registry cross-references (OSM, COTREX, USFS).",93109
"ref": "#externalTrailIds",94110
"type": "ref"95111
},96112
"segmentType": {97113
"description": "Type or profile category of the segment.",98114
"knownValues": [99115
"climb",100116
"descent",101117
"sprint",102118
"trail",103119
"traverse"104120
],105121
"type": "string"106122
},107123
"sourceActivityRef": {108124
"description": "Optional reference to the source activity from which the segment was extracted.",109125
"ref": "com.atproto.repo.strongRef",110126
"type": "ref"111127
},112128
"sport": {113129
"description": "Primary sport class for this segment (e.g. mountain_bike, trail_run).",114130
"type": "string"115131
},116132
"startGate": {117133
"description": "Start timing gate coordinate and tolerance radius.",118134
"ref": "#timingGate",119135
"type": "ref"120136
},121137
"title": {122138
"description": "Title or display name of the segment.",123139
"maxGraphemes": 300,124140
"maxLength": 3000,125141
"type": "string"126142
}127143
},128144
"required": [129145
"title",130146
"segmentType",131147
"sport",132148
"startGate",133149
"endGate",134150
"directionality",135151
"geometry",136152
"createdAt"137153
],138154
"type": "object"139155
},140156
"type": "record"141157
},142158
"simplifiedLineString": {143159
"properties": {144160
"coordinates": {145161
"description": "Polyline coordinate tuples array.",146162
"items": {147163
"items": {148164
"type": "string"149165
},150166
"type": "array"151167
},152168
"maxLength": 500,153169
"type": "array"154170
},155171
"type": {156172
"const": "LineString",157173
"description": "GeoJSON LineString type.",158174
"type": "string"159175
}160176
},161177
"required": [162178
"type",163179
"coordinates"164180
],165181
"type": "object"166182
},167183
"timingGate": {168184
"properties": {169185
"coordinate": {170186
"description": "Timing gate coordinate tuple [lon, lat, ele?].",171187
"items": {172188
"type": "string"173189
},174190
"type": "array"175191
},176192
"radiusMeters": {177193
"default": 25,178194
"description": "Snapping radius in meters around the gate coordinate.",179195
"maximum": 200,180196
"minimum": 5,181197
"type": "integer"182198
}183199
},184200
"required": [185201
"coordinate"186202
],187203
"type": "object"188204
}189205
},190206
"id": "world.treeline.segment.record",191207
"lexicon": 1192208
}