Signed player progression state. Singleton (rkey: self), overwritten via putRecord. Backend validates XP claims before signing.
any
Any valid record key
Properties
createdAt
string
datetime
Required
When the record was first created
level
integer
Required
Current player level (derived from XP table)
minimum: 1maximum: 99progressPercentage
string
Optional
Progress toward next level as decimal string
signature
ref
#chronicleSignature
Required
No description available.
totalXP
integer
Required
Total accumulated XP
minimum: 0triggerSource
string
Optional
What triggered this save (level_up, session_end, visibility_hidden, periodic, card_advance)
updatedAt
string
datetime
Optional
When the record was last updated
xpGainedSinceLastSign
integer
Optional
XP gained since the last signed progress record (for rate validation against daily activity)
minimum: 0xpToNextLevel
integer
Optional
XP remaining to reach next level
minimum: 0View raw schema
{
"description": "Signed player progression state. Singleton (rkey: self), overwritten via putRecord. Backend validates XP claims before signing.",
"key": "any",
"record": {
"properties": {
"createdAt": {
"description": "When the record was first created",
"format": "datetime",
"type": "string"
},
"level": {
"description": "Current player level (derived from XP table)",
"maximum": 99,
"minimum": 1,
"type": "integer"
},
"progressPercentage": {
"description": "Progress toward next level as decimal string",
"type": "string"
},
"signature": {
"ref": "#chronicleSignature",
"type": "ref"
},
"totalXP": {
"description": "Total accumulated XP",
"minimum": 0,
"type": "integer"
},
"triggerSource": {
"description": "What triggered this save (level_up, session_end, visibility_hidden, periodic, card_advance)",
"type": "string"
},
"updatedAt": {
"description": "When the record was last updated",
"format": "datetime",
"type": "string"
},
"xpGainedSinceLastSign": {
"description": "XP gained since the last signed progress record (for rate validation against daily activity)",
"minimum": 0,
"type": "integer"
},
"xpToNextLevel": {
"description": "XP remaining to reach next level",
"minimum": 0,
"type": "integer"
}
},
"required": [
"totalXP",
"level",
"signature",
"createdAt"
],
"type": "object"
},
"type": "record"
}