net.anisota.chronicle.achievement

anisota.net

Schema Diff

+1 -1

From

CID
bafyreiasrbaseo7...
Indexed At
2026-06-22 18:49 UTC
View this version

To

CID
bafyreianfyx3ua4...
Indexed At
2026-07-20 17:07 UTC
View this version

Compatibility Analysis

Backward Compatible

No changes detected.

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

Compare Other Versions

Lexicon Garden

@