net.anisota.chronicle.achievement

anisota.net

Documentation

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.

main record

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.

Record Key any Any valid record key

Properties

achievementId string Required

Unique identifier for the achievement (e.g. 'followers2500', 'level50')

maxLength: 100 bytes
category string Required

Category of the achievement

Allowed: followers, level, social, collection, patterns, special, expedition
createdAt string datetime Required

When the achievement record was created

dailyRecordRef string Optional

AT URI of the daily record when the achievement was unlocked

description string Optional

Description of what was accomplished

maxLength: 500 bytes
name string Optional

Display name of the achievement

maxLength: 100 bytes
rarity string Optional

Rarity tier of the achievement

Allowed: common, uncommon, rare, epic, legendary
tier integer Optional

Tier or milestone value (e.g. 2500 for followers2500)

minimum: 0
unlockedAt string datetime Required

When the achievement was unlocked

xpReward integer Optional

XP awarded for this achievement

minimum: 0
View raw schema
{
  "key": "any",
  "type": "record",
  "record": {
    "type": "object",
    "required": [
      "achievementId",
      "category",
      "unlockedAt",
      "signature",
      "createdAt"
    ],
    "properties": {
      "name": {
        "type": "string",
        "maxLength": 100,
        "description": "Display name of the achievement"
      },
      "tier": {
        "type": "integer",
        "minimum": 0,
        "description": "Tier or milestone value (e.g. 2500 for followers2500)"
      },
      "rarity": {
        "enum": [
          "common",
          "uncommon",
          "rare",
          "epic",
          "legendary"
        ],
        "type": "string",
        "description": "Rarity tier of the achievement"
      },
      "context": {
        "ref": "#achievementContext",
        "type": "ref"
      },
      "category": {
        "enum": [
          "followers",
          "level",
          "social",
          "collection",
          "patterns",
          "special",
          "expedition"
        ],
        "type": "string",
        "description": "Category of the achievement"
      },
      "xpReward": {
        "type": "integer",
        "minimum": 0,
        "description": "XP awarded for this achievement"
      },
      "createdAt": {
        "type": "string",
        "format": "datetime",
        "description": "When the achievement record was created"
      },
      "signature": {
        "ref": "#chronicleSignature",
        "type": "ref"
      },
      "unlockedAt": {
        "type": "string",
        "format": "datetime",
        "description": "When the achievement was unlocked"
      },
      "description": {
        "type": "string",
        "maxLength": 500,
        "description": "Description of what was accomplished"
      },
      "achievementId": {
        "type": "string",
        "maxLength": 100,
        "description": "Unique identifier for the achievement (e.g. 'followers2500', 'level50')"
      },
      "dailyRecordRef": {
        "type": "string",
        "description": "AT URI of the daily record when the achievement was unlocked"
      }
    }
  },
  "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."
}
achievementContext object

Contextual data at the time of achievement unlock

Properties

followerCount integer Optional

Follower count when achievement was unlocked

minimum: 0
level integer Optional

Player level when achievement was unlocked

minimum: 1
postCount integer Optional

Post count when achievement was unlocked

minimum: 0
specimenCount integer Optional

Specimen count when achievement was unlocked

minimum: 0
totalXP integer Optional

Total XP when achievement was unlocked

minimum: 0
View raw schema
{
  "type": "object",
  "properties": {
    "level": {
      "type": "integer",
      "minimum": 1,
      "description": "Player level when achievement was unlocked"
    },
    "totalXP": {
      "type": "integer",
      "minimum": 0,
      "description": "Total XP when achievement was unlocked"
    },
    "postCount": {
      "type": "integer",
      "minimum": 0,
      "description": "Post count when achievement was unlocked"
    },
    "followerCount": {
      "type": "integer",
      "minimum": 0,
      "description": "Follower count when achievement was unlocked"
    },
    "specimenCount": {
      "type": "integer",
      "minimum": 0,
      "description": "Specimen count when achievement was unlocked"
    }
  },
  "description": "Contextual data at the time of achievement unlock"
}
chronicleSignature object

ES256 cryptographic signature proving record authenticity. The signature itself proves legitimacy - no separate verification lexicons needed.

Properties

alg string Required

Signing algorithm (ES256)

kid string Required

Key identifier for the signing key

nonce string Required

Unique random nonce to prevent replay

sig string Required

Base64-encoded ES256 signature

signedAt string datetime Required

When the record was signed

version integer Required

Signature schema version

View raw schema
{
  "type": "object",
  "required": [
    "sig",
    "alg",
    "kid",
    "signedAt",
    "nonce",
    "version"
  ],
  "properties": {
    "alg": {
      "type": "string",
      "description": "Signing algorithm (ES256)"
    },
    "kid": {
      "type": "string",
      "description": "Key identifier for the signing key"
    },
    "sig": {
      "type": "string",
      "description": "Base64-encoded ES256 signature"
    },
    "nonce": {
      "type": "string",
      "description": "Unique random nonce to prevent replay"
    },
    "version": {
      "type": "integer",
      "description": "Signature schema version"
    },
    "signedAt": {
      "type": "string",
      "format": "datetime",
      "description": "When the record was signed"
    }
  },
  "description": "ES256 cryptographic signature proving record authenticity. The signature itself proves legitimacy - no separate verification lexicons needed."
}

Lexicon Garden

@