world.treeline.actor.preferences
Schema Diff
+40 -0
Compatibility Analysis
Breaking Changes Detected
2 breaking changes, 10 non-breaking changes.
Breaking Changes (2)
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "world.treeline.actor.preferences#sportGearDefault", src: "world.treeline.actor.preferences#sportGearDefault", tgt: "world.treeline.actor.preferences#sportGearDefault.sport", kind: "prop", name: Some("sport") }
- RequiredEdgeAdded RequiredEdgeAdded { vertex_id: "world.treeline.actor.preferences#sportGearDefault", src: "world.treeline.actor.preferences#sportGearDefault", tgt: "world.treeline.actor.preferences#sportGearDefault.gearUri", kind: "prop", name: Some("gearUri") }
Non-Breaking Changes (10)
- AddedVertex AddedVertex { vertex_id: "world.treeline.actor.preferences#sportGearDefault" }
- AddedVertex AddedVertex { vertex_id: "world.treeline.actor.preferences#sportGearDefault.gearUri" }
- AddedVertex AddedVertex { vertex_id: "world.treeline.actor.preferences#sportGearDefault.sport" }
- AddedVertex AddedVertex { vertex_id: "world.treeline.actor.preferences:body.allowReuse" }
- AddedVertex AddedVertex { vertex_id: "world.treeline.actor.preferences:body.defaultGear" }
- AddedVertex AddedVertex { vertex_id: "world.treeline.actor.preferences:body.defaultGear:items" }
- AddedEdge AddedEdge { src: "world.treeline.actor.preferences:body", tgt: "world.treeline.actor.preferences:body.allowReuse", kind: "prop", name: Some("allowReuse") }
- AddedEdge AddedEdge { src: "world.treeline.actor.preferences:body", tgt: "world.treeline.actor.preferences:body.defaultGear", kind: "prop", name: Some("defaultGear") }
- AddedEdge AddedEdge { src: "world.treeline.actor.preferences:body.defaultGear", tgt: "world.treeline.actor.preferences:body.defaultGear:items", kind: "items", name: None }
- AddedEdge AddedEdge { src: "world.treeline.actor.preferences:body.defaultGear:items", tgt: "world.treeline.actor.preferences#sportGearDefault", kind: "ref", name: None }
Migration Guidance
Added Elements
AddedVertex { vertex_id: "world.treeline.actor.preferences#sportGearDefault" }AddedVertex { vertex_id: "world.treeline.actor.preferences#sportGearDefault.gearUri" }AddedVertex { vertex_id: "world.treeline.actor.preferences#sportGearDefault.sport" }AddedVertex { vertex_id: "world.treeline.actor.preferences:body.allowReuse" }AddedVertex { vertex_id: "world.treeline.actor.preferences:body.defaultGear" }AddedVertex { vertex_id: "world.treeline.actor.preferences:body.defaultGear:items" }
Additional Notes
- Breaking: RequiredEdgeAdded { vertex_id: "world.treeline.actor.preferences#sportGearDefault", src: "world.treeline.actor.preferences#sportGearDefault", tgt: "world.treeline.actor.preferences#sportGearDefault.sport", kind: "prop", name: Some("sport") }
- Breaking: RequiredEdgeAdded { vertex_id: "world.treeline.actor.preferences#sportGearDefault", src: "world.treeline.actor.preferences#sportGearDefault", tgt: "world.treeline.actor.preferences#sportGearDefault.gearUri", kind: "prop", name: Some("gearUri") }
- Non-breaking: AddedEdge { src: "world.treeline.actor.preferences:body", tgt: "world.treeline.actor.preferences:body.allowReuse", kind: "prop", name: Some("allowReuse") }
- Non-breaking: AddedEdge { src: "world.treeline.actor.preferences:body", tgt: "world.treeline.actor.preferences:body.defaultGear", kind: "prop", name: Some("defaultGear") }
- Non-breaking: AddedEdge { src: "world.treeline.actor.preferences:body.defaultGear", tgt: "world.treeline.actor.preferences:body.defaultGear:items", kind: "items", name: None }
- Non-breaking: AddedEdge { src: "world.treeline.actor.preferences:body.defaultGear:items", tgt: "world.treeline.actor.preferences#sportGearDefault", kind: "ref", name: None }
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"main": {
5
5
"description": "Athlete display units, default sports, and privacy preferences for Treeline.",
6
6
"key": "literal:self",
7
7
"record": {
8
8
"properties": {
9
+
"allowReuse": {
10
+
"default": "coAthletes",
11
+
"description": "Who may save this athlete's public activities as their own: 'coAthletes' (tagged co-athletes and confirmed group matches, the default), 'everyone' (co-athletes save as an activity; anyone else saves as a route), or 'nobody'. Unset means 'coAthletes'.",
12
+
"knownValues": [
13
+
"everyone",
14
+
"coAthletes",
15
+
"nobody"
16
+
],
17
+
"type": "string"
18
+
},
19
+
"defaultGear": {
20
+
"description": "Per-sport default gear. Preselected in the upload and edit pickers and used as the default for the gear backfill. One entry per sport; gear that is retired or deleted is ignored.",
21
+
"items": {
22
+
"ref": "#sportGearDefault",
23
+
"type": "ref"
24
+
},
25
+
"maxLength": 32,
26
+
"type": "array"
27
+
},
9
28
"defaultHideStartEndMeters": {
10
29
"default": 0,
11
30
"description": "Default distance in meters trimmed from start and end for privacy.",
12
31
"maximum": 100000,
13
32
"minimum": 0,
14
33
"type": "integer"
15
34
},
16
35
"defaultPrivacy": {
17
36
"default": "public",
18
37
"description": "Default visibility setting for new activities ('public' or 'unlisted'). Restricted/private training logs and groups/circles belong to ATProto Permissioned Spaces (Proposal 0016). Historical values ('followers', 'private', 'permissioned') are retained for schema compatibility.",
19
38
"knownValues": [
20
39
"public",
21
40
"unlisted",
22
41
"followers",
23
42
"private",
24
43
"permissioned"
25
44
],
26
45
"type": "string"
27
46
},
28
47
"defaultSport": {
29
48
"description": "Default sport category selected when recording or uploading activities.",
30
49
"type": "string"
31
50
},
32
51
"distanceUnits": {
33
52
"default": "km",
34
53
"description": "Preferred unit of measurement for distance.",
35
54
"knownValues": [
36
55
"km",
37
56
"mi"
38
57
],
39
58
"type": "string"
40
59
},
41
60
"elevationUnits": {
42
61
"default": "m",
43
62
"description": "Preferred unit of measurement for elevation.",
44
63
"knownValues": [
45
64
"m",
46
65
"ft"
47
66
],
48
67
"type": "string"
49
68
},
50
69
"temperatureUnits": {
51
70
"default": "c",
52
71
"description": "Preferred unit of measurement for temperature.",
53
72
"knownValues": [
54
73
"c",
55
74
"f"
56
75
],
57
76
"type": "string"
58
77
},
59
78
"unitSystem": {
60
79
"description": "[Deprecated in v0.10: Use distanceUnits, elevationUnits, temperatureUnits] Legacy unit system.",
61
80
"knownValues": [
62
81
"metric",
63
82
"imperial"
64
83
],
65
84
"type": "string"
66
85
},
67
86
"updatedAt": {
68
87
"description": "Timestamp when preferences were last updated.",
69
88
"format": "datetime",
70
89
"type": "string"
71
90
}
72
91
},
73
92
"type": "object"
74
93
},
75
94
"type": "record"
95
+
},
96
+
"sportGearDefault": {
97
+
"properties": {
98
+
"gearUri": {
99
+
"description": "AT-URI of the world.treeline.gear.item to use by default for this sport.",
100
+
"format": "at-uri",
101
+
"maxLength": 512,
102
+
"type": "string"
103
+
},
104
+
"sport": {
105
+
"description": "Sport identifier, as used in activity.sport.",
106
+
"maxGraphemes": 64,
107
+
"maxLength": 64,
108
+
"type": "string"
109
+
}
110
+
},
111
+
"required": [
112
+
"sport",
113
+
"gearUri"
114
+
],
115
+
"type": "object"
76
116
}
77
117
},
78
118
"id": "world.treeline.actor.preferences",
79
119
"lexicon": 1
80
120
}