net.anisota.chronicle.fieldwork

anisota.net

Documentation

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.

main record

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.

Record Key any Any valid record key

Properties

completedAt string datetime Required

When the quest was completed

createdAt string datetime Required

When the quest record was created

description string Optional

Description of what was accomplished

maxLength: 500 bytes
name string Optional

Display title of the quest

maxLength: 100 bytes
questId string Required

Unique identifier for the quest (e.g. 'first-post'). Matches the record's rkey.

maxLength: 100 bytes
retroactive boolean Optional

Whether the quest was completed retroactively from existing activity rather than live

track string Required

Quest track this quest belongs to (e.g. 'field-basics', 'observatory', 'expedition', 'craft')

maxLength: 50 bytes
xpAwarded integer Required

XP awarded for completing this quest

minimum: 0
View raw schema
{
  "key": "any",
  "type": "record",
  "record": {
    "type": "object",
    "required": [
      "questId",
      "track",
      "xpAwarded",
      "completedAt",
      "signature",
      "createdAt"
    ],
    "properties": {
      "name": {
        "type": "string",
        "maxLength": 100,
        "description": "Display title of the quest"
      },
      "track": {
        "type": "string",
        "maxLength": 50,
        "description": "Quest track this quest belongs to (e.g. 'field-basics', 'observatory', 'expedition', 'craft')"
      },
      "context": {
        "ref": "#questContext",
        "type": "ref"
      },
      "questId": {
        "type": "string",
        "maxLength": 100,
        "description": "Unique identifier for the quest (e.g. 'first-post'). Matches the record's rkey."
      },
      "createdAt": {
        "type": "string",
        "format": "datetime",
        "description": "When the quest record was created"
      },
      "signature": {
        "ref": "#chronicleSignature",
        "type": "ref"
      },
      "xpAwarded": {
        "type": "integer",
        "minimum": 0,
        "description": "XP awarded for completing this quest"
      },
      "completedAt": {
        "type": "string",
        "format": "datetime",
        "description": "When the quest was completed"
      },
      "description": {
        "type": "string",
        "maxLength": 500,
        "description": "Description of what was accomplished"
      },
      "retroactive": {
        "type": "boolean",
        "description": "Whether the quest was completed retroactively from existing activity rather than live"
      }
    }
  },
  "description": "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."
}
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."
}
questContext object

Contextual data at the time of quest completion

Properties

appMode string Optional

App mode ('story' or 'open') when the quest was completed

level integer Optional

Player level when the quest was completed

minimum: 1
totalXP integer Optional

Total XP when the quest was completed

minimum: 0
View raw schema
{
  "type": "object",
  "properties": {
    "level": {
      "type": "integer",
      "minimum": 1,
      "description": "Player level when the quest was completed"
    },
    "appMode": {
      "type": "string",
      "description": "App mode ('story' or 'open') when the quest was completed"
    },
    "totalXP": {
      "type": "integer",
      "minimum": 0,
      "description": "Total XP when the quest was completed"
    }
  },
  "description": "Contextual data at the time of quest completion"
}

Lexicon Garden

@