net.anisota.chronicle.log.monthly
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"chronicleSignature": {
"description": "ES256 cryptographic signature proving record authenticity",
"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"
},
"inAppCounts": {
"description": "Per-category counts of activity performed inside anisota, summed across the period and across devices.",
"properties": {
"likes": {
"description": "Likes created in anisota",
"minimum": 0,
"type": "integer"
},
"posts": {
"description": "Top-level posts created in anisota",
"minimum": 0,
"type": "integer"
},
"quotes": {
"description": "Quote posts created in anisota",
"minimum": 0,
"type": "integer"
},
"replies": {
"description": "Replies created in anisota",
"minimum": 0,
"type": "integer"
},
"reposts": {
"description": "Reposts created in anisota",
"minimum": 0,
"type": "integer"
}
},
"type": "object"
},
"main": {
"description": "Monthly aggregation of weekly records. rkey is YYYY-MM. Updated once per week, finalized when month ends.",
"key": "any",
"record": {
"properties": {
"aggregates": {
"ref": "#monthlyAggregates",
"type": "ref"
},
"createdAt": {
"description": "When the monthly record was first created",
"format": "datetime",
"type": "string"
},
"expeditionRefs": {
"description": "AT URIs of expedition records that occurred during this month",
"items": {
"type": "string"
},
"type": "array"
},
"finalizedAt": {
"description": "When the monthly record was finalized (end of month)",
"format": "datetime",
"type": "string"
},
"inApp": {
"description": "Rolled-up in-anisota activity for the month (summed daily inApp across devices, per field). Optional and additive; the read side may instead compute this from the month's daily logs.",
"ref": "#inAppCounts",
"type": "ref"
},
"lowerLogRefs": {
"description": "AT URIs of weekly log records included in this month",
"items": {
"type": "string"
},
"type": "array"
},
"month": {
"description": "Month string in YYYY-MM format (e.g. 2026-02)",
"type": "string"
},
"patterns": {
"ref": "#monthlyPatterns",
"type": "ref"
},
"signature": {
"ref": "#chronicleSignature",
"type": "ref"
},
"status": {
"description": "Whether this month is still being updated or has been finalized",
"enum": [
"active",
"finalized"
],
"type": "string"
},
"upperLogRefs": {
"description": "AT URIs of containing logs (yearly) this month belongs to",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"month",
"aggregates",
"status",
"signature",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"monthlyAggregates": {
"description": "Rolled-up counts from weekly records",
"properties": {
"daysActive": {
"description": "Number of days with activity this month",
"minimum": 0,
"type": "integer"
},
"likesReceived": {
"description": "Total likes received this month",
"minimum": 0,
"type": "integer"
},
"postsCreated": {
"description": "Total posts created this month",
"minimum": 0,
"type": "integer"
},
"postsRead": {
"description": "Total posts read this month",
"minimum": 0,
"type": "integer"
},
"repliesReceived": {
"description": "Total replies received this month",
"minimum": 0,
"type": "integer"
},
"specimensPhotographed": {
"description": "New specimens photographed this month",
"minimum": 0,
"type": "integer"
},
"totalXPGained": {
"description": "Total XP gained this month",
"minimum": 0,
"type": "integer"
},
"weeksActive": {
"description": "Number of weeks with activity this month",
"minimum": 0,
"type": "integer"
}
},
"type": "object"
},
"monthlyPatterns": {
"description": "Activity pattern aggregation for the month based on half-hour blocks",
"properties": {
"avgBlocksPerDay": {
"description": "Average active blocks per day (totalActiveBlocks / daysActive, rounded)",
"minimum": 0,
"type": "integer"
},
"peakBlocks": {
"description": "Highest activeBlockCount for any single day in the month",
"maximum": 48,
"minimum": 0,
"type": "integer"
},
"totalActiveBlocks": {
"description": "Sum of activeBlockCount across all days in the month",
"minimum": 0,
"type": "integer"
}
},
"type": "object"
}
},
"id": "net.anisota.chronicle.log.monthly",
"lexicon": 1
}
Metadata
- DID
-
did:plc:lcieujcfkv4jx7gehsvok3pr - CID
-
bafyreibpyync5gizyn4y22jgtkjgdhrzya6z42u5mkfrqzuqymbdbe5fjm - Indexed At
- 2026-07-23 23:28 UTC
- AT-URI
-
at://did:plc:lcieujcfkv4jx7gehsvok3pr/com.atproto.lexicon.schema/net.anisota.chronicle.log.monthly
Version History (2 versions)
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
Yearly aggregation of monthly records. rkey is YYYY. Updated once per month, finalized when year ends.
-
Weekly aggregation of daily records. rkey is YYYY-WNN (ISO week). Updated once per day, finalized when week ends.
-
Daily activity snapshot. Updated throughout the day via putRecord. rkey is YYYY-MM-DD in user's local timezone.