net.anisota.chronicle.fieldwork
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"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": "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.",
"key": "any",
"record": {
"properties": {
"completedAt": {
"description": "When the quest was completed",
"format": "datetime",
"type": "string"
},
"context": {
"ref": "#questContext",
"type": "ref"
},
"createdAt": {
"description": "When the quest record was created",
"format": "datetime",
"type": "string"
},
"description": {
"description": "Description of what was accomplished",
"maxLength": 500,
"type": "string"
},
"name": {
"description": "Display title of the quest",
"maxLength": 100,
"type": "string"
},
"questId": {
"description": "Unique identifier for the quest (e.g. 'first-post'). Matches the record's rkey.",
"maxLength": 100,
"type": "string"
},
"retroactive": {
"description": "Whether the quest was completed retroactively from existing activity rather than live",
"type": "boolean"
},
"signature": {
"ref": "#chronicleSignature",
"type": "ref"
},
"track": {
"description": "Quest track this quest belongs to (e.g. 'field-basics', 'observatory', 'expedition', 'craft')",
"maxLength": 50,
"type": "string"
},
"xpAwarded": {
"description": "XP awarded for completing this quest",
"minimum": 0,
"type": "integer"
}
},
"required": [
"questId",
"track",
"xpAwarded",
"completedAt",
"signature",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"questContext": {
"description": "Contextual data at the time of quest completion",
"properties": {
"appMode": {
"description": "App mode ('story' or 'open') when the quest was completed",
"type": "string"
},
"level": {
"description": "Player level when the quest was completed",
"minimum": 1,
"type": "integer"
},
"totalXP": {
"description": "Total XP when the quest was completed",
"minimum": 0,
"type": "integer"
}
},
"type": "object"
}
},
"id": "net.anisota.chronicle.fieldwork",
"lexicon": 1
}
Metadata
- DID
-
did:plc:lcieujcfkv4jx7gehsvok3pr - CID
-
bafyreift426detby2vulyjucnk7h3okaeiiki6t3b3s4z2hspwc342k4ye - Indexed At
- 2026-07-26 20:11 UTC
- AT-URI
-
at://did:plc:lcieujcfkv4jx7gehsvok3pr/com.atproto.lexicon.schema/net.anisota.chronicle.fieldwork
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
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…
-
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 achievem…
-
Immutable level milestone record. Created once on level-up with createRecord. rkey is zero-padded level (001-099).
-
Signed player progression state. Singleton (rkey: self), overwritten via putRecord. Backend validates XP claims before signing.