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