From
bafyreifggkkkhrtikhs6lw53jwnmjatt3gykod2xcrrox22q53incmkhvq
indexed 2026-10-13 01:18 UTC
View this version
To
bafyreicczoqe6ijg6llhuvqmkxcb75bkwbar2ds55mhn3ziwimzddgabqm
indexed 2026-10-15 18:45 UTC
View this version
Compatibility
breaking 1 breaking change, 13 non-breaking changes.
Breaking changes (1)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "com.dryan.timeline.entry#highlight", src: "com.dryan.timeline.entry#highlight", tgt: "com.dryan.timeline.entry#highlight.text", kind: "prop", name: Some("text") }
Non-breaking changes (13)
- AddedVertex AddedVertex { vertex_id: "com.dryan.timeline.entry#book.highlights" }
- AddedVertex AddedVertex { vertex_id: "com.dryan.timeline.entry#book.highlights:items" }
- AddedVertex AddedVertex { vertex_id: "com.dryan.timeline.entry#highlight" }
- AddedVertex AddedVertex { vertex_id: "com.dryan.timeline.entry#highlight.highlightedAt" }
- AddedVertex AddedVertex { vertex_id: "com.dryan.timeline.entry#highlight.location" }
- AddedVertex AddedVertex { vertex_id: "com.dryan.timeline.entry#highlight.note" }
- AddedVertex AddedVertex { vertex_id: "com.dryan.timeline.entry#highlight.text" }
- AddedEdge AddedEdge { src: "com.dryan.timeline.entry#book", tgt: "com.dryan.timeline.entry#book.highlights", kind: "prop", name: Some("highlights") }
- AddedEdge AddedEdge { src: "com.dryan.timeline.entry#book.highlights", tgt: "com.dryan.timeline.entry#book.highlights:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "com.dryan.timeline.entry#book.highlights:items", tgt: "com.dryan.timeline.entry#highlight", kind: "ref", name: None }
- AddedEdge AddedEdge { src: "com.dryan.timeline.entry#highlight", tgt: "com.dryan.timeline.entry#highlight.highlightedAt", kind: "prop", name: Some("highlightedAt") }
- AddedEdge AddedEdge { src: "com.dryan.timeline.entry#highlight", tgt: "com.dryan.timeline.entry#highlight.location", kind: "prop", name: Some("location") }
- AddedEdge AddedEdge { src: "com.dryan.timeline.entry#highlight", tgt: "com.dryan.timeline.entry#highlight.note", kind: "prop", name: Some("note") }
Migration guidance
Added
AddedVertex { vertex_id: "com.dryan.timeline.entry#book.highlights" }AddedVertex { vertex_id: "com.dryan.timeline.entry#book.highlights:items" }AddedVertex { vertex_id: "com.dryan.timeline.entry#highlight" }AddedVertex { vertex_id: "com.dryan.timeline.entry#highlight.highlightedAt" }AddedVertex { vertex_id: "com.dryan.timeline.entry#highlight.location" }AddedVertex { vertex_id: "com.dryan.timeline.entry#highlight.note" }AddedVertex { vertex_id: "com.dryan.timeline.entry#highlight.text" }
Notes
- Breaking: RequiredEdgeAdded { vertex_id: "com.dryan.timeline.entry#highlight", src: "com.dryan.timeline.entry#highlight", tgt: "com.dryan.timeline.entry#highlight.text", kind: "prop", name: Some("text") }
- Non-breaking: AddedEdge { src: "com.dryan.timeline.entry#book", tgt: "com.dryan.timeline.entry#book.highlights", kind: "prop", name: Some("highlights") }
- Non-breaking: AddedEdge { src: "com.dryan.timeline.entry#book.highlights", tgt: "com.dryan.timeline.entry#book.highlights:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "com.dryan.timeline.entry#book.highlights:items", tgt: "com.dryan.timeline.entry#highlight", kind: "ref", name: None }
- Non-breaking: AddedEdge { src: "com.dryan.timeline.entry#highlight", tgt: "com.dryan.timeline.entry#highlight.highlightedAt", kind: "prop", name: Some("highlightedAt") }
- Non-breaking: AddedEdge { src: "com.dryan.timeline.entry#highlight", tgt: "com.dryan.timeline.entry#highlight.location", kind: "prop", name: Some("location") }
- Non-breaking: AddedEdge { src: "com.dryan.timeline.entry#highlight", tgt: "com.dryan.timeline.entry#highlight.note", kind: "prop", name: Some("note") }
Changes
11
{22
"$type": "com.atproto.lexicon.schema",33
"defs": {44
"achievement": {55
"properties": {66
"achievementId": {77
"type": "string"88
},99
"description": {1010
"type": "string"1111
},1212
"game": {1313
"type": "string"1414
},1515
"iconUrl": {1616
"format": "uri",1717
"type": "string"1818
},1919
"platform": {2020
"knownValues": [2121
"xbox"2222
],2323
"type": "string"2424
},2525
"xboxTitleId": {2626
"type": "integer"2727
}2828
},2929
"required": [3030
"game",3131
"platform"3232
],3333
"type": "object"3434
},3535
"activity": {3636
"properties": {3737
"averageHeartrate": {3838
"description": "Beats per minute, decimal string.",3939
"type": "string"4040
},4141
"averageSpeed": {4242
"description": "Metres per second, decimal string.",4343
"type": "string"4444
},4545
"bounds": {4646
"ref": "#bounds",4747
"type": "ref"4848
},4949
"distanceMeters": {5050
"type": "integer"5151
},5252
"elapsedTimeSeconds": {5353
"type": "integer"5454
},5555
"elevationGainMeters": {5656
"type": "integer"5757
},5858
"elevationLossMeters": {5959
"type": "integer"6060
},6161
"end": {6262
"ref": "#point",6363
"type": "ref"6464
},6565
"maxElevationMeters": {6666
"type": "integer"6767
},6868
"maxHeartrate": {6969
"description": "Beats per minute, decimal string.",7070
"type": "string"7171
},7272
"maxSpeed": {7373
"description": "Metres per second, decimal string.",7474
"type": "string"7575
},7676
"minElevationMeters": {7777
"type": "integer"7878
},7979
"movingTimeSeconds": {8080
"type": "integer"8181
},8282
"polyline": {8383
"description": "Google encoded polyline of the track.",8484
"type": "string"8585
},8686
"source": {8787
"description": "Where the track came from (Strava, AllTrails, onX...).",8888
"type": "string"8989
},9090
"sourceId": {9191
"description": "The activity's id at the source, e.g. the Strava activity id.",9292
"type": "string"9393
},9494
"sourceUrl": {9595
"format": "uri",9696
"type": "string"9797
},9898
"sportType": {9999
"type": "string"100100
},101101
"start": {102102
"ref": "#point",103103
"type": "ref"104104
}105105
},106106
"type": "object"107107
},108108
"article": {109109
"properties": {110110
"crosspostedFrom": {111111
"ref": "#crosspost",112112
"type": "ref"113113
},114114
"description": {115115
"type": "string"116116
},117117
"shareImage": {118118
"description": "Filename of the article's share graphic on the site.",119119
"type": "string"120120
}121121
},122122
"type": "object"123123
},124124
"book": {125125
"properties": {126126
"amazonUrl": {127127
"format": "uri",128128
"type": "string"129129
},130130
"asin": {131131
"type": "string"132132
},133133
"author": {134134
"type": "string"135135
},136136
"bookshopOrgUrl": {137137
"format": "uri",138138
"type": "string"139139
},140140
"coverUrl": {141141
"format": "uri",142142
"type": "string"143143
},144144
"dateFinished": {145145
"type": "string"146146
},147147
"dateStarted": {148148
"type": "string"149149
},150150
"goodreadsId": {151151
"type": "string"152152
},153153
"goodreadsUrl": {154154
"format": "uri",155155
"type": "string"156156
},157
"highlights": {158
"description": "Kindle highlights and notes, oldest first.",159
"items": {160
"ref": "#highlight",161
"type": "ref"162
},163
"type": "array"164
},157165
"isbn": {158166
"type": "string"159167
},160168
"openLibraryUrl": {161169
"format": "uri",162170
"type": "string"163171
},164172
"reviewUrl": {165173
"format": "uri",166174
"type": "string"167175
},168176
"subtitle": {169177
"type": "string"170178
}171179
},172180
"type": "object"173181
},174182
"bounds": {175183
"properties": {176184
"maxLatitude": {177185
"type": "string"178186
},179187
"maxLongitude": {180188
"type": "string"181189
},182190
"minLatitude": {183191
"type": "string"184192
},185193
"minLongitude": {186194
"type": "string"187195
}188196
},189197
"required": [190198
"minLatitude",191199
"maxLatitude",192200
"minLongitude",193201
"maxLongitude"194202
],195203
"type": "object"196204
},197205
"code": {198206
"properties": {199207
"action": {200208
"type": "string"201209
},202210
"commitCount": {203211
"type": "integer"204212
},205213
"commits": {206214
"items": {207215
"ref": "#commit",208216
"type": "ref"209217
},210218
"type": "array"211219
},212220
"event": {213221
"description": "GitHub event type (push, pull_request, issue_comment...).",214222
"type": "string"215223
},216224
"githubEventId": {217225
"type": "string"218226
},219227
"repo": {220228
"description": "owner/name on GitHub.",221229
"type": "string"222230
},223231
"url": {224232
"format": "uri",225233
"type": "string"226234
}227235
},228236
"required": [229237
"repo",230238
"event"231239
],232240
"type": "object"233241
},234242
"commit": {235243
"properties": {236244
"message": {237245
"type": "string"238246
},239247
"sha": {240248
"type": "string"241249
}242250
},243251
"required": [244252
"sha"245253
],246254
"type": "object"247255
},248256
"crosspost": {249257
"properties": {250258
"name": {251259
"type": "string"252260
},253261
"url": {254262
"format": "uri",255263
"type": "string"256264
}257265
},258266
"required": [259267
"url"260268
],261269
"type": "object"262270
},263271
"game": {264272
"properties": {265273
"date": {266274
"description": "YYYY-MM-DD of the session.",267275
"type": "string"268276
},269277
"leagueId": {270278
"description": "Hearthstone ranked league.",271279
"type": "integer"272280
},273281
"legendRank": {274282
"type": "integer"275283
},276284
"platform": {277285
"knownValues": [278286
"xbox",279287
"hearthstone"280288
],281289
"type": "string"282290
},283291
"starLevel": {284292
"type": "integer"285293
},286294
"stars": {287295
"type": "integer"288296
},289297
"titles": {290298
"items": {291299
"ref": "#gameTitle",292300
"type": "ref"293301
},294302
"type": "array"295303
}296304
},297305
"required": [298306
"platform"299307
],300308
"type": "object"301309
},302310
"gameTitle": {303311
"properties": {304312
"logoUrl": {305313
"format": "uri",306314
"type": "string"307315
},308316
"name": {309317
"type": "string"310318
}311319
},312320
"required": [313321
"name"314322
],315323
"type": "object"316324
},325
"highlight": {326
"properties": {327
"highlightedAt": {328
"format": "datetime",329
"type": "string"330
},331
"location": {332
"description": "Kindle location number.",333
"type": "string"334
},335
"note": {336
"type": "string"337
},338
"text": {339
"type": "string"340
}341
},342
"required": [343
"text"344
],345
"type": "object"346
},317347
"link": {318348
"properties": {319349
"note": {320350
"type": "string"321351
},322352
"url": {323353
"format": "uri",324354
"type": "string"325355
}326356
},327357
"required": [328358
"url"329359
],330360
"type": "object"331361
},332362
"main": {333363
"properties": {334364
"detail": {335365
"refs": [336366
"#article",337367
"#photo",338368
"#book",339369
"#video",340370
"#link",341371
"#movie",342372
"#activity",343373
"#code",344374
"#game",345375
"#achievement"346376
],347377
"type": "union"348378
},349379
"entryType": {350380
"knownValues": [351381
"article",352382
"photo",353383
"book",354384
"video",355385
"link",356386
"movie",357387
"activity.walk",358388
"activity.hike",359389
"activity.cycle",360390
"activity.kayak",361391
"activity.other",362392
"code",363393
"game",364394
"game.achievement"365395
],366396
"type": "string"367397
},368398
"localDate": {369399
"description": "YYYY-MM-DD: the day the entry is filed under on the site.",370400
"type": "string"371401
},372402
"timezone": {373403
"description": "IANA zone the entry happened in; localDate is derived from publishedAt in this zone.",374404
"type": "string"375405
}376406
},377407
"required": [378408
"entryType"379409
],380410
"type": "object"381411
},382412
"movie": {383413
"properties": {384414
"letterboxdUrl": {385415
"format": "uri",386416
"type": "string"387417
},388418
"liked": {389419
"type": "boolean"390420
},391421
"posterUrl": {392422
"format": "uri",393423
"type": "string"394424
},395425
"rating": {396426
"description": "Star rating as a decimal string, absent when unrated.",397427
"type": "string"398428
},399429
"rewatch": {400430
"type": "boolean"401431
},402432
"tmdbId": {403433
"description": "The Movie Database id.",404434
"type": "string"405435
},406436
"year": {407437
"type": "integer"408438
}409439
},410440
"type": "object"411441
},412442
"photo": {413443
"properties": {414444
"altText": {415445
"type": "string"416446
},417447
"contentHash": {418448
"description": "sha256 fingerprint used for duplicate detection.",419449
"type": "string"420450
},421451
"exif": {422452
"description": "Camera and capture metadata as extracted at upload; non-integer numbers are decimal strings.",423453
"type": "unknown"424454
},425455
"imageUrl": {426456
"description": "Full-size delivery URL; coverImage on the document is the copy under atproto's blob cap.",427457
"format": "uri",428458
"type": "string"429459
}430460
},431461
"type": "object"432462
},433463
"point": {434464
"properties": {435465
"latitude": {436466
"description": "Decimal degrees as a string.",437467
"type": "string"438468
},439469
"longitude": {440470
"description": "Decimal degrees as a string.",441471
"type": "string"442472
}443473
},444474
"required": [445475
"latitude",446476
"longitude"447477
],448478
"type": "object"449479
},450480
"video": {451481
"properties": {452482
"authorName": {453483
"type": "string"454484
},455485
"authorUrl": {456486
"format": "uri",457487
"type": "string"458488
},459489
"durationSeconds": {460490
"type": "integer"461491
},462492
"note": {463493
"type": "string"464494
},465495
"provider": {466496
"knownValues": [467497
"youtube",468498
"vimeo"469499
],470500
"type": "string"471501
},472502
"thumbnailUrl": {473503
"format": "uri",474504
"type": "string"475505
},476506
"url": {477507
"format": "uri",478508
"type": "string"479509
},480510
"videoId": {481511
"type": "string"482512
}483513
},484514
"required": [485515
"url"486516
],487517
"type": "object"488518
}489519
},490520
"description": "The dryan.com timeline's per-entry data, carried in the `content` open union of a site.standard.document record. The document holds what every entry shares (title, path, publishedAt, description, textContent, tags, coverImage); this holds the entry type, the day it belongs to, and the type-specific detail. atproto records cannot carry floats, so measurements that are not whole numbers (speeds, heart rates, coordinates) are decimal strings.",491521
"id": "com.dryan.timeline.entry",492522
"lexicon": 1493523
}