From
bafyreigc25ilw5znajt3pni42dmyvn4wuafpbxfqn6usmwb5iw3pebmnym
indexed 2026-10-28 07:52 UTC
View this version
To
bafyreigk2wwjoeuxfwbbqd2gqa6zatbzuzlfywa3vgv4obsytqefvdl3sq
indexed 2026-11-10 20:52 UTC
View this version
Compatibility
breaking 1 breaking change, 0 non-breaking changes.
Breaking changes (1)
- ConstraintTightened ConstraintTightened { vertex_id: "app.kimbia.activity:body.source", sort: "knownValues", old_value: "[\"strava\",\"manual\",\"fit-file\",\"gpx-file\",\"kimbia\",\"file\",\"from-atproto\",\"suunto\",\"polar\",\"wahoo\",\"nolio\",\"garmin\"]", new_value: "[\"strava\",\"manual\",\"fit-file\",\"gpx-file\",\"kimbia\",\"file\",\"from-atproto\",\"suunto\",\"polar\",\"wahoo\",\"nolio\",\"garmin\",\"coros\"]" }
Migration guidance
Constraint changes
- ConstraintTightened ConstraintTightened { vertex_id: "app.kimbia.activity:body.source", sort: "knownValues", old_value: "[\"strava\",\"manual\",\"fit-file\",\"gpx-file\",\"kimbia\",\"file\",\"from-atproto\",\"suunto\",\"polar\",\"wahoo\",\"nolio\",\"garmin\"]", new_value: "[\"strava\",\"manual\",\"fit-file\",\"gpx-file\",\"kimbia\",\"file\",\"from-atproto\",\"suunto\",\"polar\",\"wahoo\",\"nolio\",\"garmin\",\"coros\"]" }
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {44
"main": {55
"description": "A recorded training session or race (run, ride, swim, ...). Kimbia publishes ONLY public activities, projected to a privacy-safe public field set. This lexicon captures the core, interoperable activity fields. Floats are string-encoded decimals (DAG-CBOR has no float type); durations are integer seconds.",66
"key": "tid",77
"record": {88
"properties": {99
"altitude": {1010
"description": "Delta-encoded integer-metre altitude stream (same signed-varint base64 as the polyline), one value per polyline point for the elevation profile. Follows the polyline's crop; omitted when the map is hidden or no elevation was recorded.",1111
"maxLength": 20000,1212
"type": "string"1313
},1414
"avgSpeed": {1515
"description": "Average speed in meters per second. String-encoded decimal.",1616
"maxLength": 64,1717
"type": "string"1818
},1919
"description": {2020
"description": "Athlete-provided description of the activity.",2121
"maxLength": 3000,2222
"type": "string"2323
},2424
"device": {2525
"description": "Name of the device that recorded the activity.",2626
"maxLength": 300,2727
"type": "string"2828
},2929
"distance": {3030
"description": "Total distance in meters. String-encoded decimal, e.g. '51214.6'.",3131
"maxLength": 64,3232
"type": "string"3333
},3434
"elapsedTime": {3535
"description": "Total time in seconds, stops included - the official or chip time when the athlete recorded one. Published only when the athlete makes exact times public.",3636
"minimum": 0,3737
"type": "integer"3838
},3939
"elevationGain": {4040
"description": "Total elevation gain in meters. String-encoded decimal.",4141
"maxLength": 64,4242
"type": "string"4343
},4444
"movingTime": {4545
"description": "Time spent in motion, in seconds.",4646
"minimum": 0,4747
"type": "integer"4848
},4949
"polyline": {5050
"description": "Google encoded-polyline (precision 5) of a simplified, privacy-trimmed route for map display. Cropped by default; full when the athlete opts the full track public; omitted when the map is hidden.",5151
"maxLength": 20000,5252
"type": "string"5353
},5454
"source": {5555
"description": "Where the activity data was imported from: the provider that owns the record (kimbia = entered in Kimbia, file = an uploaded FIT/GPX/TCX, from-atproto = adopted from the athlete's PDS).",5656
"knownValues": [5757
"strava",5858
"manual",5959
"fit-file",6060
"gpx-file",6161
"kimbia",6262
"file",6363
"from-atproto",6464
"suunto",6565
"polar",6666
"wahoo",6767
"nolio",68
"garmin"68
"garmin",69
"coros"6970
],7071
"maxLength": 128,7172
"type": "string"7273
},7374
"sportType": {7475
"description": "The type of activity.",7576
"knownValues": [7677
"run",7778
"ride",7879
"swim",7980
"walk",8081
"hike",8182
"other",8283
"trail",8384
"mtb",8485
"rowing",8586
"strength",8687
"mobility",8788
"wellness",8889
"alpineski",8990
"snowboard",9091
"backcountryski",9192
"nordicski",9293
"snowshoe"9394
],9495
"maxLength": 128,9596
"type": "string"9697
},9798
"startedAt": {9899
"description": "When the activity started. PRIVACY NOTE: by default this is the athlete's local civil day at NOON UTC (e.g. '2026-06-30T12:00:00.000Z') - noon keeps the day correct for clients that re-zone the instant and leaks no timezone, while the exact time is hidden. When the athlete opts their exact times public, it is instead the TRUE start instant in their local zone with its real offset (e.g. '2026-06-30T09:30:00.000+02:00'). Read the date portion for the activity's day; do not assume the time-of-day is meaningful unless an offset is present.",99100
"format": "datetime",100101
"type": "string"101102
},102103
"title": {103104
"description": "Athlete-provided name for the activity.",104105
"maxLength": 300,105106
"type": "string"106107
}107108
},108109
"required": [109110
"sportType",110111
"startedAt",111112
"distance",112113
"movingTime"113114
],114115
"type": "object"115116
},116117
"type": "record"117118
}118119
},119120
"description": "PROVISIONAL: activities are generic enough that they belong in a community-driven lexicon rather than an app namespace. When a community schema stabilizes, Kimbia will migrate to it and deprecate this one in its favor.",120121
"id": "app.kimbia.activity",121122
"lexicon": 1122123
}