app.thesocialwire.readStateDefs

samclemente.me

{
  "$type": "com.atproto.lexicon.schema",
  "defs": {
    "boundary": {
      "properties": {
        "createdAt": {
          "format": "datetime",
          "maxLength": 2048,
          "type": "string"
        },
        "entryId": {
          "maxLength": 2048,
          "type": "string"
        },
        "scope": {
          "ref": "#scope",
          "type": "ref"
        }
      },
      "required": [
        "scope",
        "createdAt"
      ],
      "type": "object"
    },
    "calendar": {
      "description": "Exact age selection audit metadata. Reference date is YYYY-MM-DD in the IANA timezone; cutoff is resolved UTC. Matching uses exact subject IDs, not recomputed calendar dates.",
      "properties": {
        "cutoff": {
          "format": "datetime",
          "type": "string"
        },
        "referenceDate": {
          "maxLength": 10,
          "type": "string"
        },
        "timeZone": {
          "maxLength": 128,
          "type": "string"
        }
      },
      "required": [
        "cutoff",
        "timeZone",
        "referenceDate"
      ],
      "type": "object"
    },
    "fragment": {
      "description": "Surviving semantic fragment with its original whole-intent digest. Device identity/counter must appear together; otherwise a matching finite legacy receipt is required.",
      "properties": {
        "actedAt": {
          "format": "datetime",
          "maxLength": 2048,
          "type": "string"
        },
        "actionId": {
          "maxLength": 128,
          "type": "string"
        },
        "boundaries": {
          "items": {
            "ref": "#boundary",
            "type": "ref"
          },
          "maxLength": 128,
          "type": "array"
        },
        "calendar": {
          "ref": "#calendar",
          "type": "ref"
        },
        "deviceCounter": {
          "maximum": 9007199254740991,
          "minimum": 1,
          "type": "integer"
        },
        "deviceId": {
          "maxLength": 128,
          "minLength": 1,
          "type": "string"
        },
        "fragment": {
          "const": true,
          "type": "boolean"
        },
        "intentHash": {
          "maxLength": 64,
          "minLength": 64,
          "type": "string"
        },
        "selection": {
          "enum": [
            "boundaries",
            "exact"
          ],
          "maxLength": 10,
          "type": "string"
        },
        "sequence": {
          "maximum": 9007199254740991,
          "minimum": 1,
          "type": "integer"
        },
        "state": {
          "enum": [
            "read",
            "unread"
          ],
          "maxLength": 6,
          "type": "string"
        },
        "subjectUris": {
          "items": {
            "maxLength": 2048,
            "type": "string"
          },
          "maxLength": 256,
          "type": "array"
        }
      },
      "required": [
        "actionId",
        "sequence",
        "state",
        "actedAt",
        "selection",
        "fragment",
        "intentHash"
      ],
      "type": "object"
    },
    "operation": {
      "description": "Public read-history operation. Exactly one nonempty boundaries or subjectUris array must match selection. Sequence is allocated using manifest CAS, never device time. Splits of one action share sequence, actionId, state and actedAt.",
      "properties": {
        "actedAt": {
          "format": "datetime",
          "maxLength": 2048,
          "type": "string"
        },
        "actionId": {
          "maxLength": 128,
          "type": "string"
        },
        "boundaries": {
          "items": {
            "ref": "#boundary",
            "type": "ref"
          },
          "maxLength": 128,
          "type": "array"
        },
        "calendar": {
          "ref": "#calendar",
          "type": "ref"
        },
        "selection": {
          "enum": [
            "boundaries",
            "exact"
          ],
          "maxLength": 10,
          "type": "string"
        },
        "sequence": {
          "maximum": 9007199254740991,
          "minimum": 1,
          "type": "integer"
        },
        "state": {
          "enum": [
            "read",
            "unread"
          ],
          "maxLength": 6,
          "type": "string"
        },
        "subjectUris": {
          "items": {
            "maxLength": 2048,
            "type": "string"
          },
          "maxLength": 256,
          "type": "array"
        }
      },
      "required": [
        "actionId",
        "sequence",
        "state",
        "actedAt",
        "selection"
      ],
      "type": "object"
    },
    "receipt": {
      "description": "A devices chunk requires deviceId, committedCounter and prefixHash only. A legacyReceipts chunk requires actionId, originalSequence and originalIntentHash only. Version-aware clients and projectors enforce the complete disjoint shape. Receipts never execute read actions.",
      "properties": {
        "actionId": {
          "maxLength": 128,
          "minLength": 1,
          "type": "string"
        },
        "committedCounter": {
          "maximum": 9007199254740991,
          "minimum": 0,
          "type": "integer"
        },
        "deviceId": {
          "maxLength": 128,
          "minLength": 1,
          "type": "string"
        },
        "originalIntentHash": {
          "maxLength": 64,
          "minLength": 64,
          "type": "string"
        },
        "originalSequence": {
          "maximum": 9007199254740991,
          "minimum": 1,
          "type": "integer"
        },
        "prefixHash": {
          "maxLength": 64,
          "minLength": 64,
          "type": "string"
        }
      },
      "type": "object"
    },
    "scope": {
      "properties": {
        "authorDid": {
          "format": "did",
          "maxLength": 2048,
          "type": "string"
        },
        "publicationId": {
          "maxLength": 2048,
          "type": "string"
        },
        "publicationSiteKeys": {
          "items": {
            "maxLength": 2048,
            "type": "string"
          },
          "maxLength": 128,
          "type": "array"
        }
      },
      "required": [
        "publicationId",
        "authorDid",
        "publicationSiteKeys"
      ],
      "type": "object"
    }
  },
  "id": "app.thesocialwire.readStateDefs",
  "lexicon": 1
}

Validate Record

Validate a record against app.thesocialwire.readStateDefs

Validation Options
Treat any remaining unresolved references as valid

Metadata

DID
did:plc:qy5pluw2bsuq2x6albsgkvx3
CID
bafyreieasgcciyyp3ruhq3r7qry4bl2tpsry7vvaqhyyoqf6djq5uqzj3u
Indexed At
2026-09-09 00:17 UTC
AT-URI
at://did:plc:qy5pluw2bsuq2x6albsgkvx3/com.atproto.lexicon.schema/app.thesocialwire.readStateDefs

Similar Lexicons

Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.

  • Public immutable chunk, at most64KiB. V1 requires operations. V2 requires kind with exactly fragments for state or receipts for devices/legacyReceipts. Applications enforce the complete version/kind shape and all roots …

  • Public canonical read/unread manifest. V1 uses head; V2 requires revision and compactionVersion=1 with separate state/device/legacy-receipt roots. Every root must be fully CID-verified before atomic activation. Maintena…

Lexicon Garden

@