app.starrysky.streak.policy

starrysky.app

Documentation

The authority record defining the rules for a Starrysky verified streak.

main record

The authority record defining the rules for a Starrysky verified streak.

Record Key tid Timestamp-based ID

Properties

allowedGranters array of string did Optional

An array of DIDs authorized to grant extra streak freezes to the user.

allowedWitnesses array of string did Optional

An array of DIDs authorized to sign attestations for this policy. Required if witnessed.

cadence object Required

No description available.

createdAt string datetime Required

Timestamp when this policy record was created.

freezesGrantedAtMilestone integer Optional

Number of freezes to grant when reaching a milestone (explicit or recurring).

Default: 0
gracePeriodIntervals integer Optional

The number of intervals a user can skip before needing to use a freeze or breaking their streak.

Default: 0
includeFreezesInStreak boolean Optional

If true, frozen intervals are included in the streak sequence count.

Default: false
intervalsToEarnFreeze integer Required

Number of successful intervals required to earn 1 freeze.

maxFreezes integer Optional

The maximum number of freezes a user can bank at one time.

Default: 3
milestones array of integer Optional

Explicit streak counts that trigger a celebration or reward.

name string Required

Human-readable name for this streak (e.g., 'Daily Coding').

maxLength: 100 bytes
originService string Optional

Optional: The NSID of the service being tracked for automated check-ins (e.g., app.bsky.feed.post).

recurringMilestoneInterval integer Optional

Interval for repeating milestones (e.g., every 100 days) after explicit milestones are passed.

startingFreezes integer Optional

Number of freezes granted to the user when they first start the streak.

Default: 0
verificationType string Required

Whether this streak requires a third-party cryptographic signature.

Known values: self-reported, witnessed
View raw schema
{
  "key": "tid",
  "type": "record",
  "record": {
    "type": "object",
    "required": [
      "name",
      "verificationType",
      "cadence",
      "intervalsToEarnFreeze",
      "createdAt"
    ],
    "properties": {
      "name": {
        "type": "string",
        "maxLength": 100,
        "description": "Human-readable name for this streak (e.g., 'Daily Coding')."
      },
      "cadence": {
        "type": "object",
        "required": [
          "type",
          "requiredCheckinsPerInterval"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "The time window during which the required check-ins must occur.",
            "knownValues": [
              "daily",
              "weekly",
              "monthly",
              "quarterly",
              "yearly"
            ]
          },
          "intervalResetDay": {
            "type": "integer",
            "description": "For weekly: 0-6 (Sun-Sat). For monthly: 1-31. Defines when the window rolls over."
          },
          "requiredCheckinsPerInterval": {
            "type": "integer",
            "default": 1,
            "description": "Number of check-ins required within the interval to maintain the streak."
          }
        }
      },
      "createdAt": {
        "type": "string",
        "format": "datetime",
        "description": "Timestamp when this policy record was created."
      },
      "maxFreezes": {
        "type": "integer",
        "default": 3,
        "description": "The maximum number of freezes a user can bank at one time."
      },
      "milestones": {
        "type": "array",
        "items": {
          "type": "integer"
        },
        "description": "Explicit streak counts that trigger a celebration or reward."
      },
      "originService": {
        "type": "string",
        "description": "Optional: The NSID of the service being tracked for automated check-ins (e.g., app.bsky.feed.post)."
      },
      "allowedGranters": {
        "type": "array",
        "items": {
          "type": "string",
          "format": "did"
        },
        "description": "An array of DIDs authorized to grant extra streak freezes to the user."
      },
      "startingFreezes": {
        "type": "integer",
        "default": 0,
        "description": "Number of freezes granted to the user when they first start the streak."
      },
      "allowedWitnesses": {
        "type": "array",
        "items": {
          "type": "string",
          "format": "did"
        },
        "description": "An array of DIDs authorized to sign attestations for this policy. Required if witnessed."
      },
      "verificationType": {
        "type": "string",
        "description": "Whether this streak requires a third-party cryptographic signature.",
        "knownValues": [
          "self-reported",
          "witnessed"
        ]
      },
      "gracePeriodIntervals": {
        "type": "integer",
        "default": 0,
        "description": "The number of intervals a user can skip before needing to use a freeze or breaking their streak."
      },
      "intervalsToEarnFreeze": {
        "type": "integer",
        "description": "Number of successful intervals required to earn 1 freeze."
      },
      "includeFreezesInStreak": {
        "type": "boolean",
        "default": false,
        "description": "If true, frozen intervals are included in the streak sequence count."
      },
      "freezesGrantedAtMilestone": {
        "type": "integer",
        "default": 0,
        "description": "Number of freezes to grant when reaching a milestone (explicit or recurring)."
      },
      "recurringMilestoneInterval": {
        "type": "integer",
        "description": "Interval for repeating milestones (e.g., every 100 days) after explicit milestones are passed."
      }
    }
  },
  "description": "The authority record defining the rules for a Starrysky verified streak."
}

Lexicon Garden

@