net.anisota.chronicle.log.daily

anisota.net

{
  "id": "net.anisota.chronicle.log.daily",
  "defs": {
    "main": {
      "key": "any",
      "type": "record",
      "record": {
        "type": "object",
        "required": [
          "date",
          "player",
          "activity",
          "signature",
          "createdAt"
        ],
        "properties": {
          "date": {
            "type": "string",
            "description": "Date string in YYYY-MM-DD format (user's local timezone)"
          },
          "player": {
            "ref": "#playerSnapshot",
            "type": "ref"
          },
          "activity": {
            "ref": "#activityCounts",
            "type": "ref"
          },
          "patterns": {
            "ref": "#patternsData",
            "type": "ref"
          },
          "createdAt": {
            "type": "string",
            "format": "datetime",
            "description": "When the daily record was first created"
          },
          "signature": {
            "ref": "#chronicleSignature",
            "type": "ref"
          },
          "updatedAt": {
            "type": "string",
            "format": "datetime",
            "description": "When the daily record was last updated"
          },
          "engagement": {
            "ref": "#engagementCounts",
            "type": "ref"
          },
          "expeditions": {
            "ref": "#expeditionSummary",
            "type": "ref"
          },
          "upperLogRefs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "AT URIs of containing logs (weekly, monthly, yearly) this day belongs to"
          },
          "expeditionRefs": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "AT URIs of expedition records that occurred on this day"
          }
        }
      },
      "description": "Daily activity snapshot. Updated throughout the day via putRecord. rkey is YYYY-MM-DD in user's local timezone."
    },
    "patternsData": {
      "type": "object",
      "properties": {
        "activeBlocks": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "maxLength": 48,
          "description": "Half-hour slots with activity, as HH:MM strings (e.g. '09:00', '09:30'). Max 48 per day."
        },
        "activeBlockCount": {
          "type": "integer",
          "maximum": 48,
          "minimum": 0,
          "description": "Number of half-hour blocks with activity today"
        },
        "offlineXPAwarded": {
          "type": "integer",
          "minimum": 0,
          "description": "XP awarded for offline time"
        }
      },
      "description": "Activity pattern data for the day based on half-hour blocks"
    },
    "activityCounts": {
      "type": "object",
      "properties": {
        "likesSent": {
          "type": "integer",
          "minimum": 0,
          "description": "Likes sent today"
        },
        "postsRead": {
          "type": "integer",
          "minimum": 0,
          "description": "Posts read today"
        },
        "repliesSent": {
          "type": "integer",
          "minimum": 0,
          "description": "Replies sent today"
        },
        "repostsSent": {
          "type": "integer",
          "minimum": 0,
          "description": "Reposts sent today"
        },
        "postsCreated": {
          "type": "integer",
          "minimum": 0,
          "description": "Posts created today"
        }
      },
      "description": "Aggregate activity counts for the day (no timestamps or URIs)"
    },
    "playerSnapshot": {
      "type": "object",
      "required": [
        "level",
        "totalXP"
      ],
      "properties": {
        "level": {
          "type": "integer",
          "minimum": 1,
          "description": "Player level at end of day"
        },
        "totalXP": {
          "type": "integer",
          "minimum": 0,
          "description": "Total accumulated XP"
        },
        "itemsTotal": {
          "type": "integer",
          "minimum": 0,
          "description": "Total items in inventory"
        },
        "xpGainedToday": {
          "type": "integer",
          "minimum": 0,
          "description": "XP gained during this day"
        },
        "itemsAcquiredToday": {
          "type": "integer",
          "minimum": 0,
          "description": "Number of items acquired today"
        },
        "itemsConsumedToday": {
          "type": "integer",
          "minimum": 0,
          "description": "Number of items consumed/used today"
        },
        "specimensDocumented": {
          "type": "integer",
          "minimum": 0,
          "description": "Total specimens in collection"
        }
      },
      "description": "Player state snapshot for this day"
    },
    "engagementCounts": {
      "type": "object",
      "properties": {
        "likesReceived": {
          "type": "integer",
          "minimum": 0,
          "description": "Likes received on posts today"
        },
        "quotesReceived": {
          "type": "integer",
          "minimum": 0,
          "description": "Quotes received today"
        },
        "repliesReceived": {
          "type": "integer",
          "minimum": 0,
          "description": "Replies received on posts today"
        },
        "repostsReceived": {
          "type": "integer",
          "minimum": 0,
          "description": "Reposts received today"
        }
      },
      "description": "Engagement received on user's posts (aggregate counts only)"
    },
    "expeditionSummary": {
      "type": "object",
      "properties": {
        "count": {
          "type": "integer",
          "minimum": 0,
          "description": "Number of expeditions completed today"
        },
        "totalDuration": {
          "type": "integer",
          "minimum": 0,
          "description": "Total expedition duration in milliseconds"
        },
        "currentCampNumber": {
          "type": "integer",
          "minimum": 0,
          "description": "Current camp number within the active expedition (0 = exploring, not camped; unset if no active expedition)"
        },
        "currentExpeditionNumber": {
          "type": "integer",
          "minimum": 1,
          "description": "Number of the currently active expedition (unset if no active expedition)"
        }
      },
      "description": "Summary of expeditions for the day (details in chronicle.expedition)"
    },
    "chronicleSignature": {
      "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"
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}

Validate Record

Validate a record against net.anisota.chronicle.log.daily

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:lcieujcfkv4jx7gehsvok3pr
CID
bafyreid5qkvmht6l5tny75uv64v5w362u6ibuanmg7qorsyrhjxixy2g2i
Indexed At
2026-06-22 18:49 UTC
AT-URI
at://did:plc:lcieujcfkv4jx7gehsvok3pr/com.atproto.lexicon.schema/net.anisota.chronicle.log.daily

Lexicon Garden

@