net.anisota.chronicle.achievement

anisota.net

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "achievementContext": {
      "description": "Contextual data at the time of achievement unlock",
      "properties": {
        "followerCount": {
          "description": "Follower count when achievement was unlocked",
          "minimum": 0,
          "type": "integer"
        },
        "level": {
          "description": "Player level when achievement was unlocked",
          "minimum": 1,
          "type": "integer"
        },
        "postCount": {
          "description": "Post count when achievement was unlocked",
          "minimum": 0,
          "type": "integer"
        },
        "specimenCount": {
          "description": "Specimen count when achievement was unlocked",
          "minimum": 0,
          "type": "integer"
        },
        "totalXP": {
          "description": "Total XP when achievement was unlocked",
          "minimum": 0,
          "type": "integer"
        }
      },
      "type": "object"
    },
    "chronicleSignature": {
      "description": "ES256 cryptographic signature proving record authenticity. The signature itself proves legitimacy - no separate verification lexicons needed.",
      "properties": {
        "alg": {
          "description": "Signing algorithm (ES256)",
          "type": "string"
        },
        "kid": {
          "description": "Key identifier for the signing key",
          "type": "string"
        },
        "nonce": {
          "description": "Unique random nonce to prevent replay",
          "type": "string"
        },
        "sig": {
          "description": "Base64-encoded ES256 signature",
          "type": "string"
        },
        "signedAt": {
          "description": "When the record was signed",
          "format": "datetime",
          "type": "string"
        },
        "version": {
          "description": "Signature schema version",
          "type": "integer"
        }
      },
      "required": [
        "sig",
        "alg",
        "kid",
        "signedAt",
        "nonce",
        "version"
      ],
      "type": "object"
    },
    "main": {
      "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.",
      "key": "any",
      "record": {
        "properties": {
          "achievementId": {
            "description": "Unique identifier for the achievement (e.g. 'followers2500', 'level50')",
            "maxLength": 100,
            "type": "string"
          },
          "category": {
            "description": "Category of the achievement",
            "enum": [
              "followers",
              "level",
              "social",
              "collection",
              "patterns",
              "special",
              "expedition"
            ],
            "type": "string"
          },
          "context": {
            "ref": "#achievementContext",
            "type": "ref"
          },
          "createdAt": {
            "description": "When the achievement record was created",
            "format": "datetime",
            "type": "string"
          },
          "dailyRecordRef": {
            "description": "AT URI of the daily record when the achievement was unlocked",
            "type": "string"
          },
          "description": {
            "description": "Description of what was accomplished",
            "maxLength": 500,
            "type": "string"
          },
          "name": {
            "description": "Display name of the achievement",
            "maxLength": 100,
            "type": "string"
          },
          "rarity": {
            "description": "Rarity tier of the achievement",
            "enum": [
              "common",
              "uncommon",
              "rare",
              "epic",
              "legendary"
            ],
            "type": "string"
          },
          "signature": {
            "ref": "#chronicleSignature",
            "type": "ref"
          },
          "tier": {
            "description": "Tier or milestone value (e.g. 2500 for followers2500)",
            "minimum": 0,
            "type": "integer"
          },
          "unlockedAt": {
            "description": "When the achievement was unlocked",
            "format": "datetime",
            "type": "string"
          },
          "xpReward": {
            "description": "XP awarded for this achievement",
            "minimum": 0,
            "type": "integer"
          }
        },
        "required": [
          "achievementId",
          "category",
          "unlockedAt",
          "signature",
          "createdAt"
        ],
        "type": "object"
      },
      "type": "record"
    }
  },
  "id": "net.anisota.chronicle.achievement",
  "lexicon": 1
}

Validate Record

Validate a record against net.anisota.chronicle.achievement

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:lcieujcfkv4jx7gehsvok3pr
CID
bafyreiasrbaseo7mur3rgktw4vy3vxoqcy3x4dwovqy3eo2w74vuferyxy
Indexed At
2026-06-22 18:49 UTC
AT-URI
at://did:plc:lcieujcfkv4jx7gehsvok3pr/com.atproto.lexicon.schema/net.anisota.chronicle.achievement

Version History (2 versions)

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • net.anisota.chronicle.milestone recordnot from the namespace authority

    A milestone reached in the field, shown on the Fieldwork page's Milestones tab. Successor to net.anisota.chronicle.achievement (legacy records in that collection remain readable but no new ones are written). rkey is the…

  • net.anisota.chronicle.level recordnot from the namespace authority

    Immutable level milestone record. Created once on level-up with createRecord. rkey is zero-padded level (001-099).

  • net.anisota.chronicle.fieldwork recordnot from the namespace authority

    Signed quest completion record. rkey is the quest ID (e.g. 'first-post', 'make-camp'). Created once with createRecord when the quest is completed. Immutable.

  • net.anisota.chronicle.progress recordnot from the namespace authority

    Signed player progression state. Singleton (rkey: self), overwritten via putRecord. Backend validates XP claims before signing.

  • Record declaring that the user has earned an accomplishment (badge/milestone). One record per accomplishment type per user.

Lexicon Garden

@