net.anisota.chronicle.achievement
Schema Diff
+1 -1
Compatibility Analysis
Backward Compatible
No changes detected.
1
1
{
2
2
"$type": "com.atproto.lexicon.schema",
3
3
"defs": {
4
4
"achievementContext": {
5
5
"description": "Contextual data at the time of achievement unlock",
6
6
"properties": {
7
7
"followerCount": {
8
8
"description": "Follower count when achievement was unlocked",
9
9
"minimum": 0,
10
10
"type": "integer"
11
11
},
12
12
"level": {
13
13
"description": "Player level when achievement was unlocked",
14
14
"minimum": 1,
15
15
"type": "integer"
16
16
},
17
17
"postCount": {
18
18
"description": "Post count when achievement was unlocked",
19
19
"minimum": 0,
20
20
"type": "integer"
21
21
},
22
22
"specimenCount": {
23
23
"description": "Specimen count when achievement was unlocked",
24
24
"minimum": 0,
25
25
"type": "integer"
26
26
},
27
27
"totalXP": {
28
28
"description": "Total XP when achievement was unlocked",
29
29
"minimum": 0,
30
30
"type": "integer"
31
31
}
32
32
},
33
33
"type": "object"
34
34
},
35
35
"chronicleSignature": {
36
36
"description": "ES256 cryptographic signature proving record authenticity. The signature itself proves legitimacy - no separate verification lexicons needed.",
37
37
"properties": {
38
38
"alg": {
39
39
"description": "Signing algorithm (ES256)",
40
40
"type": "string"
41
41
},
42
42
"kid": {
43
43
"description": "Key identifier for the signing key",
44
44
"type": "string"
45
45
},
46
46
"nonce": {
47
47
"description": "Unique random nonce to prevent replay",
48
48
"type": "string"
49
49
},
50
50
"sig": {
51
51
"description": "Base64-encoded ES256 signature",
52
52
"type": "string"
53
53
},
54
54
"signedAt": {
55
55
"description": "When the record was signed",
56
56
"format": "datetime",
57
57
"type": "string"
58
58
},
59
59
"version": {
60
60
"description": "Signature schema version",
61
61
"type": "integer"
62
62
}
63
63
},
64
64
"required": [
65
65
"sig",
66
66
"alg",
67
67
"kid",
68
68
"signedAt",
69
69
"nonce",
70
70
"version"
71
71
],
72
72
"type": "object"
73
73
},
74
74
"main": {
75
-
"description": "Consolidated achievement record. Replaces 30 beta achievement lexicons. rkey is the achievement ID (e.g. followers2500, level50). Created once with createRecord when achievement is unlocked. Immutable.",
75
+
"description": "DEPRECATED - superseded by net.anisota.chronicle.milestone. No new records are written to this collection; the schema is kept because earlier records still exist on users' PDSes and remain readable. rkey is the achievement ID (e.g. followers2500, level50). Immutable.",
76
76
"key": "any",
77
77
"record": {
78
78
"properties": {
79
79
"achievementId": {
80
80
"description": "Unique identifier for the achievement (e.g. 'followers2500', 'level50')",
81
81
"maxLength": 100,
82
82
"type": "string"
83
83
},
84
84
"category": {
85
85
"description": "Category of the achievement",
86
86
"enum": [
87
87
"followers",
88
88
"level",
89
89
"social",
90
90
"collection",
91
91
"patterns",
92
92
"special",
93
93
"expedition"
94
94
],
95
95
"type": "string"
96
96
},
97
97
"context": {
98
98
"ref": "#achievementContext",
99
99
"type": "ref"
100
100
},
101
101
"createdAt": {
102
102
"description": "When the achievement record was created",
103
103
"format": "datetime",
104
104
"type": "string"
105
105
},
106
106
"dailyRecordRef": {
107
107
"description": "AT URI of the daily record when the achievement was unlocked",
108
108
"type": "string"
109
109
},
110
110
"description": {
111
111
"description": "Description of what was accomplished",
112
112
"maxLength": 500,
113
113
"type": "string"
114
114
},
115
115
"name": {
116
116
"description": "Display name of the achievement",
117
117
"maxLength": 100,
118
118
"type": "string"
119
119
},
120
120
"rarity": {
121
121
"description": "Rarity tier of the achievement",
122
122
"enum": [
123
123
"common",
124
124
"uncommon",
125
125
"rare",
126
126
"epic",
127
127
"legendary"
128
128
],
129
129
"type": "string"
130
130
},
131
131
"signature": {
132
132
"ref": "#chronicleSignature",
133
133
"type": "ref"
134
134
},
135
135
"tier": {
136
136
"description": "Tier or milestone value (e.g. 2500 for followers2500)",
137
137
"minimum": 0,
138
138
"type": "integer"
139
139
},
140
140
"unlockedAt": {
141
141
"description": "When the achievement was unlocked",
142
142
"format": "datetime",
143
143
"type": "string"
144
144
},
145
145
"xpReward": {
146
146
"description": "XP awarded for this achievement",
147
147
"minimum": 0,
148
148
"type": "integer"
149
149
}
150
150
},
151
151
"required": [
152
152
"achievementId",
153
153
"category",
154
154
"unlockedAt",
155
155
"signature",
156
156
"createdAt"
157
157
],
158
158
"type": "object"
159
159
},
160
160
"type": "record"
161
161
}
162
162
},
163
163
"id": "net.anisota.chronicle.achievement",
164
164
"lexicon": 1
165
165
}