net.anisota.chronicle.log.monthly

anisota.net

Documentation

Monthly aggregation of weekly records. rkey is YYYY-MM. Updated once per week, finalized when month ends.

main record

Monthly aggregation of weekly records. rkey is YYYY-MM. Updated once per week, finalized when month ends.

Record Key any Any valid record key

Properties

createdAt string datetime Required

When the monthly record was first created

expeditionRefs array of string Optional

AT URIs of expedition records that occurred during this month

finalizedAt string datetime Optional

When the monthly record was finalized (end of month)

lowerLogRefs array of string Optional

AT URIs of weekly log records included in this month

month string Required

Month string in YYYY-MM format (e.g. 2026-02)

status string Required

Whether this month is still being updated or has been finalized

Allowed: active, finalized
upperLogRefs array of string Optional

AT URIs of containing logs (yearly) this month belongs to

View raw schema
{
  "key": "any",
  "type": "record",
  "record": {
    "type": "object",
    "required": [
      "month",
      "aggregates",
      "status",
      "signature",
      "createdAt"
    ],
    "properties": {
      "month": {
        "type": "string",
        "description": "Month string in YYYY-MM format (e.g. 2026-02)"
      },
      "status": {
        "enum": [
          "active",
          "finalized"
        ],
        "type": "string",
        "description": "Whether this month is still being updated or has been finalized"
      },
      "patterns": {
        "ref": "#monthlyPatterns",
        "type": "ref"
      },
      "createdAt": {
        "type": "string",
        "format": "datetime",
        "description": "When the monthly record was first created"
      },
      "signature": {
        "ref": "#chronicleSignature",
        "type": "ref"
      },
      "aggregates": {
        "ref": "#monthlyAggregates",
        "type": "ref"
      },
      "finalizedAt": {
        "type": "string",
        "format": "datetime",
        "description": "When the monthly record was finalized (end of month)"
      },
      "lowerLogRefs": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "AT URIs of weekly log records included in this month"
      },
      "upperLogRefs": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "AT URIs of containing logs (yearly) this month belongs to"
      },
      "expeditionRefs": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "AT URIs of expedition records that occurred during this month"
      }
    }
  },
  "description": "Monthly aggregation of weekly records. rkey is YYYY-MM. Updated once per week, finalized when month ends."
}
chronicleSignature object

ES256 cryptographic signature proving record authenticity

Properties

alg string Required

Signing algorithm (ES256)

kid string Required

Key identifier for the signing key

nonce string Required

Unique random nonce to prevent replay

sig string Required

Base64-encoded ES256 signature

signedAt string datetime Required

When the record was signed

version integer Required

Signature schema version

View raw schema
{
  "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"
}
monthlyAggregates object

Rolled-up counts from weekly records

Properties

daysActive integer Optional

Number of days with activity this month

minimum: 0
likesReceived integer Optional

Total likes received this month

minimum: 0
postsCreated integer Optional

Total posts created this month

minimum: 0
postsRead integer Optional

Total posts read this month

minimum: 0
repliesReceived integer Optional

Total replies received this month

minimum: 0
specimensPhotographed integer Optional

New specimens photographed this month

minimum: 0
totalXPGained integer Optional

Total XP gained this month

minimum: 0
weeksActive integer Optional

Number of weeks with activity this month

minimum: 0
View raw schema
{
  "type": "object",
  "properties": {
    "postsRead": {
      "type": "integer",
      "minimum": 0,
      "description": "Total posts read this month"
    },
    "daysActive": {
      "type": "integer",
      "minimum": 0,
      "description": "Number of days with activity this month"
    },
    "weeksActive": {
      "type": "integer",
      "minimum": 0,
      "description": "Number of weeks with activity this month"
    },
    "postsCreated": {
      "type": "integer",
      "minimum": 0,
      "description": "Total posts created this month"
    },
    "likesReceived": {
      "type": "integer",
      "minimum": 0,
      "description": "Total likes received this month"
    },
    "totalXPGained": {
      "type": "integer",
      "minimum": 0,
      "description": "Total XP gained this month"
    },
    "repliesReceived": {
      "type": "integer",
      "minimum": 0,
      "description": "Total replies received this month"
    },
    "specimensPhotographed": {
      "type": "integer",
      "minimum": 0,
      "description": "New specimens photographed this month"
    }
  },
  "description": "Rolled-up counts from weekly records"
}
monthlyPatterns object

Activity pattern aggregation for the month based on half-hour blocks

Properties

avgBlocksPerDay integer Optional

Average active blocks per day (totalActiveBlocks / daysActive, rounded)

minimum: 0
peakBlocks integer Optional

Highest activeBlockCount for any single day in the month

minimum: 0maximum: 48
totalActiveBlocks integer Optional

Sum of activeBlockCount across all days in the month

minimum: 0
View raw schema
{
  "type": "object",
  "properties": {
    "peakBlocks": {
      "type": "integer",
      "maximum": 48,
      "minimum": 0,
      "description": "Highest activeBlockCount for any single day in the month"
    },
    "avgBlocksPerDay": {
      "type": "integer",
      "minimum": 0,
      "description": "Average active blocks per day (totalActiveBlocks / daysActive, rounded)"
    },
    "totalActiveBlocks": {
      "type": "integer",
      "minimum": 0,
      "description": "Sum of activeBlockCount across all days in the month"
    }
  },
  "description": "Activity pattern aggregation for the month based on half-hour blocks"
}

Lexicon Garden

@