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)

inApp ref #inAppCounts Optional

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.

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
{
  "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"
}
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
{
  "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 object

Per-category counts of activity performed inside anisota, summed across the period and across devices.

Properties

likes integer Optional

Likes created in anisota

minimum: 0
posts integer Optional

Top-level posts created in anisota

minimum: 0
quotes integer Optional

Quote posts created in anisota

minimum: 0
replies integer Optional

Replies created in anisota

minimum: 0
reposts integer Optional

Reposts created in anisota

minimum: 0
View raw schema
{
  "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"
}
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
{
  "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 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
{
  "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"
}

Lexicon Garden

@